Output Delivery System(ODS)とグラフ#

ここでは、Output Delivery System(ODS)を使用して、Webブラウザで表示できるHTML出力、高解像度プリンター用にフォーマットされたPDFファイル、Microsoft Wordに簡単にインポートできるRTFファイルなどの形式の出力を作成する方法を扱います。その過程で、デフォルトでさまざまなプロシージャから取得される出力の外観を変更する方法についても触れます。最後に、ODSを使用して、さまざまなプロシージャからのデフォルト出力ではなく、データセットを作成する方法を扱います。

また、SGPLOTプロシージャに戻って、線種、色、軸ラベル、凡例などのグラフのパラメータを調整する方法を確認します。

Output Delivery System(ODS)#

ここでOutput Delivery System(ODS)についてを扱うことで、初めて使用するようになるという印象を受けるかもしれません。実際にはSASはこれまでずっと裏側でODSを使用して、私たちが使用してきたプロシージャがデフォルトで生成するリスト出力を作成していました。ここではODSの仕組みとデフォルト設定を変更して、私たちが望む出力を入手する方法を確認します。

ODSの仕組み#

では、ODSはどのように機能するのでしょうか?出力を作成するプログラムを実行するたびに、ODSは次の処理を行います。

  1. ODSは出力オブジェクトの形で出力を生成します。各出力オブジェクトは2つのコンポーネントで構成されています。データコンポーネントには、プロシージャまたはDATAステップの結果(数値を想像してください)が含まれています。テーブル定義は結果のレンダリング方法(構造を想像してください)を指定します。たとえば、FREQプロシージャを実行して次の出力を生成したとします。

A
Frequency Percent

B
1

B
2

Total

1

60

40

100

30.00

20.00

50.00

2

40

60

100

20.00

30.00

50.00

Total

100

100

200

50.00

50.00

100.00

SASは実際にはこの出力を、テーブル定義:

A
Frequency Percent

B
1

B
2

Total

とデータコンポーネント:

A

B

COUNT

PERCENT

1

1

60

30

1

2

40

20

2

1

40

20

2

2

60

30

の2つから作成します。

  1. SASが実行されたプログラムからすべての出力オブジェクトを作成したら、オブジェクトを保存する場所を指定するだけです。実際には非常に簡単です… SASは、SASに送信するように指定したODSの出力先に、出力を送信します。またそうする際に、出力先として指定された形式でファイルに出力します。これはODSが非常に強力であり、したがって非常に優れているところです!SASプロシージャによってデフォルトで生成されるリスト出力に加えて、以下のような出力先(形式)で、出力を送信できます。

出力先(形式)

出力内容

HTML

HyperText Markup Language(HTML)でフォーマットされた出力。Webブラウザで表示できます。

Output

SASデータセット

Printer Family

Post Script(PS)、Portable Document Format(PDF)、Printer Control Language(PCL)ファイルなど、高解像度プリンター用にフォーマットされた出力

RTF

Microsoft Wordで使用するためのリッチテキスト形式の出力

次のセクションでは、これらのさまざまなODS出力先を「開く」と「閉じる」ことで、SASに出力を送信する場所を指示する方法を確認します。

ODS出力先の有効・無効化#

出力がデフォルトのHTML形式で出力ウィンドウに送信されることに満足している場合は、SASに何も指示する必要はありません。これは、HTMLがデフォルトで出力先として開かれているためです。一方、出力を別のODS出力先(たとえばPDF)に送信するように指定する場合は、出力を生成するSASコードの前に出力先を開いて有効にする必要があります。

出力先を開くには、次のODSステートメントを実行するだけです。

ODS open-destination;

ここで、open-destinationは、SASに出力を送信する場所を指示するキーワード(および出力先に必要なオプション)です。ここでは、最も一般的に使用される出力先キーワードであるListingHTMLRTF、およびPDFのみに焦点を当てます。

出力を生成するコードの後、作成した出力にアクセスできるように、出力先を閉じるように指示する必要があります。出力先を閉じるには、次のODSステートメントを実行するだけです。

ODS close-destination CLOSE;

ここで、close-destinationは、open-destinationと同じキーワードです。

理論的には、ODSステートメントは、ODS出力先を開いたり閉じたりする必要があるかどうかに応じて、任意の順序で実行できます。ただし、実際には、ほとんどのODS出力先はデフォルトで閉じられているため、プログラムの先頭で開き、最後に閉じます。例外は、デフォルトで開いているHTMLまたはListingです。例を見てみましょう。

#

データセットpenngolfには、 Pennsylvaniaの11のゴルフコースに関する情報(総ヤード数やパーなど)が含まれています。次のプログラムは、HTMLの出力先を開き、データセットpenngolfのサブセットを別のHTMLファイルに出力します。

libname phc6089 "/folders/myfolders/SAS_Notes/data";
 
ods html file = '/folders/myfolders/SAS_Notes/output/html/golf.html';

title 'Some of the penngolf data set variables'; 
proc print data = phc6089.penngolf noobs;   
  id name;
  var year type par yards;
run;
 
ods html close;
ods html;
SAS 出力

Some of the penngolf data set variables

Name Year Type Par Yards
Toftrees 1968 Resort 72 7018
Penn State Blue 1921 Public 72 6525
Centre Hills 1921 Private 71 6392
Lewistown CC . Private 72 6779
State College Elks 1973 SemiPri 71 6369
Park Hills CC 1966 SemiPri 70 6004
Sinking Valley CC 1967 SemiPri 72 6755
Williamsport CC 1909 Private 71 6489
Standing Stone GC 1973 SemiPri 70 6593
Bucknell GC 1960 SemiPri 70 6253
Mount Airy Lodge 1972 Resort 72 7123

このコードは、先に説明した標準的なODSについての慣行を示しています… プログラムの先頭で出力先を開き、最後に閉じます。ここでは、最初のODSステートメントは、HTMLの出力先を開き、PRINTプロシージャによって生成されたHTML出力を指定されたファイルに保存されるようになります。2番目のODSステートメントは、HTML出力先を閉じるように指定されます。これにより、作成されたHTMLファイルにアクセスできます。
データセットpenngolfを(未入手の場合は、READMEを参照)PC上の任意の場所にダウンロードして保存します。次にプログラムを開き、LIBNAMEステートメントを編集して、データセットを保存した場所を反映させます。また、最初のODSステートメントのFILE=オプションを編集して、結果のHTML出力を送信するファイルの場所と名前を反映させます。(ファイルの拡張子には.htmlを使用してください。)最後に、プログラムを実行します。これを行うと、2つの出力を作成することに注意する必要があります。デフォルトの出力は、常にアウトプットウィンドウまたは結果ビューアに表示されます(上記のように)。この出力のhtmlファイルは、ODS HTMLのFILEステートメントで指定したパスに保存されます。

ODSを使用することで複数の出力先に同時に出力を作成できます。そのため、複数の出力先を同時に開くことができます。各開いている出力先はリソースを使用するため、特定の出力先に出力する必要がない場合は、閉じておくことをお勧めします。複数のODS出力先が開いている場合は、キーワードショートカット_ALL_を使用して、すべての出力先を同時に閉じることができます。つまり、次のステートメント:

ODS _ALL_ CLOSE;

は、現在開いているすべての出力先を一度に閉じます。その後、使用する出力先を再び開いてください。

HTML出力の生成#

これまで結果ビューアをデフォルトの出力としてHTML出力を使用してきましたが、HTML出力を外部ファイルに保存する場合は、ODSステートメントでHTMLキーワードを使用し、保存オプションFILEなどを使用できます。ここでは、次のことによりこれまで扱ったことを拡張します。

  • 複数のプロシージャから同時にHTML出力を作成する。

  • 目次付きのHTML出力を作成する。

  • オプションを使用して、リンクとパスを指定する。

#

次のプログラムは、データセットpenngolfを使用して、PRINTプロシージャとREPORTプロシージャから同時にHTML出力を作成します。

ods html body = '/folders/myfolders/SAS_Notes/output/html/golf2.html';
 
title 'Some Par 72 Pennsylvania Golf Courses'; 
proc print data = phc6089.penngolf noobs; 
  id name;
  var year type yards;
  where par = 72;
run;

title 'Average Size of Some PA Courses'; 
proc report data = phc6089.penngolf nowindows headline headskip;  
  column type par yards;
  define type /group;
  define yards / analysis mean format = 6.1 width = 10;
  define par / analysis mean format = 4.1 width = 10;
run;
 
ods html close;
ods html;
SAS 出力

Some Par 72 Pennsylvania Golf Courses

Name Year Type Yards
Toftrees 1968 Resort 7018
Penn State Blue 1921 Public 6525
Lewistown CC . Private 6779
Sinking Valley CC 1967 SemiPri 6755
Mount Airy Lodge 1972 Resort 7123

Average Size of Some PA Courses

Type Par Yards
Private 71.3 6553.3
Public 72.0 6525.0
Resort 72.0 7070.5
SemiPri 70.6 6394.8

プログラムを開いて実行する前に、コードを軽く見てみて、何が実行されているのかを確認しましょう。

  • 最初のODSステートメントは、HTML出力先を開き、コードによって生成されたHTML出力を指定されたファイルに保存します。ODS HTMLステートメントのFILE=オプションではなく、BODY=オプションを使用して、HTML出力を保存する場所を指定していることに注意してください。2つのオプションは交換可能です。つまり、BODY=オプションはFILE=オプションの別名です。

  • 次に、PRINTプロシージャを使用して、パー72のゴルフコースに関する情報を出力します。

  • 次に、REPORTプロシージャを使用して、4つのタイプのゴルフコースそれぞれの平均ヤード数と平均パーを計算します。

  • 2番目のODSステートメントは、HTML出力先を閉じるように指示します。これにより、作成されたHTMLファイルにアクセスできます。

  • 最後に、最後のODSステートメントは、HTML出力先を再び開くように指示します。

それではプログラムを開きましょう。ここでも最初のODS HTMLステートメントを編集して、HTMLファイルを保存する場所を反映させる必要があります。次にプログラムを実行して、結果ビューアに表示される出力を確認します。上の出力のように、最初にPRINTプロシージャからの出力、次にREPORTプロシージャからの出力が表示されるはずです。 また生成されたHTML出力を最初のODS HTMLステートメントで指定されたファイルに保存していることにも注意する必要があります。ファイルを確認するには、HTMLファイルを保存するように指定したフォルダに移動します。
上記のコードを実行すると、golf2.htmlファイルが作成されます。結果ビューアに表示されるのと同じものが出力されているはずです。ただし、このgolf2.htmlファイルは、公開している簡単にWebサイトに投稿したり、他のユーザーにメールで送信したりできます。

例: 目次付きのHTML出力の作成#

多くのページが作成されるプログラムの場合、出力用の目次を作成するように指定すると便利です。次のプログラムは、前のプログラムと同じですが、最初のODS HTMLステートメントが変更され、出力用の目次を作成します。

ods html path = '/folders/myfolders/SAS_Notes/output/html/' (url = none)
         body = 'golf3.html'
         contents = 'golf3toc.html'
         frame = 'golf3frame.html';

title 'Some Par 72 Pennsylvania Golf Courses'; 
proc print data = phc6089.penngolf noobs;
  id name;
  var year type yards;
  where par = 72;
run;

title 'Average Size of Some PA Courses'; 
proc report data = phc6089.penngolf nowindows headline headskip;    
  column type par yards;
  define type /group;
  define yards / analysis mean format = 6.1 width = 10;
  define par / analysis mean format = 4.1 width = 10;
run;
 
ods html close;
ods html;
SAS 出力

Some Par 72 Pennsylvania Golf Courses

Name Year Type Yards
Toftrees 1968 Resort 7018
Penn State Blue 1921 Public 6525
Lewistown CC . Private 6779
Sinking Valley CC 1967 SemiPri 6755
Mount Airy Lodge 1972 Resort 7123

Average Size of Some PA Courses

Type Par Yards
Private 71.3 6553.3
Public 72.0 6525.0
Resort 72.0 7070.5
SemiPri 70.6 6394.8

このコードは前のプログラムとほぼ同じなので、説明が必要なのは最初のODS HTMLステートメントだけです。PATH=オプションは、後続のファイルを保存する場所を指定します。BODY=、CONTENTS=、およびFRAME=は、BODY(実際のテーブル)、目次、およびPATHで指定されたフォルダ内のBODYと目次の組み合わせたウェブページを格納するHTMLファイルの名前を指定します。PATH=のurl=noneオプションは、基本的にリンクを参照するHTMLファイルに相対パスを使用するようにします。この場合、フレームファイルが機能するためには、BODYファイルとCONTENTSファイルが同じフォルダに存在する必要があります。

HTML(ハイパーテキストマークアップ言語)の概念に少なくとも精通していない場合は、このトピックは非常に難しいものになるでしょう。簡単に言うと、HTMLは、Webブラウザに表示する内容を指示する、裏方の言語です。任意のWebページにアクセスして、ページソースを表示すると、表示されているWebページを表示するHTMLコードが表示されます。(MozillaのFirefoxブラウザを使用している場合は、「表示」を選択してから「ページソース」を選択すると、ページソースを表示できます。Edgeブラウザを使用している場合は、「ページ」を選択してから「ソースの表示」を選択すると、ページソースを表示できます。)このトピックは、HTML出力ファイルを作成したときに作成されるパス名に関するものです。パス名が適切に指定されていないと、作成したHTML出力ファイルを他のユーザーと共有することが困難になります。

他の種類の出力の作成#

これまで、ODSステートメントを使用してSASにHTML出力を生成してきました。前述のように、ODSステートメントを使用して、他の種類の出力を生成することもできます。このセクションでは、異なる種類の出力を生成するように指示する2つの例を見ていきます。最初の例では、Microsoft Wordに簡単にコピーできるRTF出力を生成します。2番目の例では、高解像度のプリンタに送信できるPDF出力を生成します。

#

次のプログラムは、データセットpenngolfのサブセットを出力し、RTFに出力します。

ods html close;
ods rtf file = '/folders/myfolders/SAS_Notes/output/rtf/golf5.rtf'
bodytitle;

title 'Some Par 72 Pennsylvania Golf Courses';        
proc print data = phc6089.penngolf noobs;   
  id name;
  var year type yards;
  where par = 72;
run;
        
ods rtf close;
ods html;
SAS 出力

Some Par 72 Pennsylvania Golf Courses

Name Year Type Yards
Toftrees 1968 Resort 7018
Penn State Blue 1921 Public 6525
Lewistown CC . Private 6779
Sinking Valley CC 1967 SemiPri 6755
Mount Airy Lodge 1972 Resort 7123

これまでのとおり、出力先をRTFにするにはODSステートメントでRTFキーワードを使用するだけです。デフォルトでは、タイトルとフットノートはWordのヘッダーとフッターに配置されます。ODS RTFステートメントのBODYTITLEオプションは、タイトルとフットノートをRTFドキュメントのメイン部分に配置します。2番目のODSステートメントはRTFを閉じるようにし、最後のODSステートメントはHTMLを再び開くようにしていることに注目してください。

Windowsを使用している場合は、出力rtfファイルを保存または開くように求めるポップアップウィンドウが表示される場合があります。RTFファイルは、WordまたはPagesで開くことができます。

#

次のプログラムは、前のプログラムとまったく同じことを行いますが、ここでは出力はPDFファイルとなります。

ods html close;
ods pdf file = '/folders/myfolders/SAS_Notes/output/pdf/golf5.rtf';

title 'Some Par 72 Pennsylvania Golf Courses';        
proc print data = phc6089.penngolf noobs;    
  id name;
  var year type yards;
  where par = 72;
run;
        
ods pdf close;
ods html;
SAS 出力

Some Par 72 Pennsylvania Golf Courses

Name Year Type Yards
Toftrees 1968 Resort 7018
Penn State Blue 1921 Public 6525
Lewistown CC . Private 6779
Sinking Valley CC 1967 SemiPri 6755
Mount Airy Lodge 1972 Resort 7123

出力をPDFにするのは非常に簡単で、ODSステートメントでPDFキーワードを使用するだけです。2番目のODSステートメントはPDFを閉じるように指示し、最後のODSステートメントはリスティング(アウトプットウインドウ)を再び開くようにしていることに注意してください。

プロシージャ出力のトレースと選択#

前述のように、ODSはプロシージャからデータを受け取ると、データコンポーネントとテーブル定義を組み合わせて出力オブジェクトを作成します。多くのプロシージャでは、ODSは1つの出力オブジェクトのみを作成しますが、他のプロシージャでは複数作成します。たとえば、BYステートメントを含むプロシージャは、通常、BYグループごとに1つの出力オブジェクトを作成します。プロシージャが複数の出力オブジェクトを作成する場合、すべての出力オブジェクトを出力に含めないようにする場合があります。代わりに、1つか2つの出力オブジェクトのみを選択するようにする場合があります。このセクションでは、ODS TRACEステートメントとODS SELECTステートメントを使用して、出力させたい特定の出力オブジェクトを選択する方法について説明します。

ODS TRACE ONステートメントは、ODS TRACE ONステートメントとODS TRACE OFFステートメントの間にあるプログラム内のすべてのコードによって作成された出力オブジェクトに関する情報をログに出力します。

#

次のプログラムは、ODS TRACEステートメントを使用して、データセットgolfbyparに対してMEANSプロシージャによって作成された出力オブジェクトに関する情報を取得します。golfbyparはデータセットpenngolfがソートされただけのものです。

proc sort data = phc6089.penngolf out = golfbypar;
  by par;
run;
 
ods trace on;
title 'Pennsylvania Golf Courses by Par';
proc means data = golfbypar;
  by par;    
run;
ods trace off;
SAS 出力

Pennsylvania Golf Courses by Par

MEANS プロシジャ

変数 N 平均 標準偏差 最小値 最大値
ID
Year
Yards
Slope
USGA
3
3
3
3
3
108.3333333
1966.33
6283.33
126.0000000
70.2333333
2.0816660
6.5064071
295.6692972
6.0000000
1.0692677
106.0000000
1960.00
6004.00
120.0000000
69.3000000
110.0000000
1973.00
6593.00
132.0000000
71.4000000
変数 N 平均 標準偏差 最小値 最大値
ID
Year
Yards
Slope
USGA
3
3
3
3
3
105.3333333
1934.33
6416.67
127.3333333
71.3333333
2.5166115
34.0196022
63.6893502
4.0414519
0.5131601
103.0000000
1909.00
6369.00
123.0000000
70.9000000
108.0000000
1973.00
6489.00
131.0000000
71.9000000
変数 N 平均 標準偏差 最小値 最大値
ID
Year
Yards
Slope
USGA
5
4
5
5
5
105.0000000
1957.00
6840.00
131.8000000
73.2600000
4.0620192
24.0970261
235.5546646
5.7619441
1.0830512
101.0000000
1921.00
6525.00
125.0000000
72.0000000
111.0000000
1972.00
7123.00
140.0000000
74.3000000

もちろん、SORTプロシージャは、永久データセットphc6089.penngolfを「par」でソートし、ソートされた結果を一時データセットgolfbyparに格納します。次に、ODS TRACE ONステートメントは、作成された出力オブジェクトに関する情報の取得を開始するように指示します。MEANSプロシージャは、データセットgolfbyparを「par」の各レベル(parが70、71、および72の場合)で要約します。最後に、ODS TRACE OFFステートメントは、作成された出力オブジェクトに関する情報の取得を停止します。

プログラムを開いて実行します。MEANSプロシージャからの出力を確認できますが、ここで本当に興味があるのは、SASがログウィンドウに出力オブジェクトに関する表示する情報です。

 出力の追加:
 -------------
 名前 :         Summary
 ラベル :       要約統計量
 テンプレート : base.summary
 パス :         Means.ByGroup1.Summary
 -------------
 NOTE: BYグループの表示:
       Par=70
 
 出力の追加:
 -------------
 名前 :         Summary
 ラベル :       要約統計量
 テンプレート : base.summary
 パス :         Means.ByGroup2.Summary
 -------------
 NOTE: BYグループの表示:
       Par=71
 
 出力の追加:
 -------------
 名前 :         Summary
 ラベル :       要約統計量
 テンプレート : base.summary
 パス :         Means.ByGroup3.Summary
 -------------
 NOTE: BYグループの表示:
       Par=72

ログの出力から、MEANSプロシージャは、BYグループごとに1つの出力オブジェクト(par = 70、par = 71、およびpar = 72)を作成しています。3つの出力オブジェクトは、同じ名前、ラベル、およびテンプレートを共有しますが、パスは異なります。たとえば、par = 70出力オブジェクトのパスはMeans.ByGroup1.Summaryと呼ばれ、par = 71出力オブジェクトのパスはMeans.ByGroup2.Summaryと呼ばれます。出力オブジェクトの名前がわかれば、ODS SELECTステートメントを使用して、SASに表示させたい特定の出力オブジェクトを指示できます。特定の出力オブジェクトを選択するには、関連するプロシージャ内にODS SELECTステートメントを追加するだけです。デフォルトでは、ODS SELECTステートメントは、ステートメントが含まれているプロシージャにのみ有効です。

#

次のプログラムは、ODS SELECTステートメントと、MEANSプロシージャのトレースから得られた情報を使用して、par 70のゴルフコースに関連する部分のみを出力します。

title 'Par 70 Golf Courses';
ods select Means.ByGroup1.Summary;
proc means data = golfbypar;
  by par;        
run;

ods select all; *Reset selection to all output tables;
SAS 出力

Par 70 Golf Courses

MEANS プロシジャ

変数 N 平均 標準偏差 最小値 最大値
ID
Year
Yards
Slope
USGA
3
3
3
3
3
108.3333333
1966.33
6283.33
126.0000000
70.2333333
2.0816660
6.5064071
295.6692972
6.0000000
1.0692677
106.0000000
1960.00
6004.00
120.0000000
69.3000000
110.0000000
1973.00
6593.00
132.0000000
71.4000000

プログラムを開いて実行し、出力から上記のpar 70のゴルフコースに関連するMEANSプロシージャの部分のみが出力されていることを確認してください。

ODS SELECT(および同様にODS EXCLUDE)には、ALLとNONEという2つの特別なキーワードがあり、これらを使用して、すべての出力オブジェクトを選択または除外できます。ここでは、ODS SELECT ALLを使用して、SASがMeans.ByGroup1.Summaryテーブルのみを選択していた状態をリセットし、後続のプロシージャが出力を生成できるようにします。そうしないと、現在選択されているテーブルのみが表示され、他のすべての出力は非表示になります。

出力の外観の変更#

出力の外観を変更する方法をすべて扱う時間があればほとんど何でも作成できるという朗報と、ここではすべてのオプションを扱う時間がないという悲報があります。実際、ほんの少し触れる程度です。このセクションでは、ODS HTMLステートメントのSTYLE=オプションを使用して、組み込まれている多くの事前定義されたスタイルテンプレートの1つを使用して、デフォルトのHTML出力の外観を変更する方法についてのみ確認します。

#

次のプログラムは、ODS HTMLステートメントのSTYLE=オプションを使用して、データセットphc6089.penngolfのサブセットを出力したときに作成されるHTML出力の表示にスタイルmeadowを使用すします。

ods html file = '/folders/myfolders/SAS_Notes/output/html/golf9.html'
        style = meadow;

title 'Some of the penngolf data set variables'; 
proc print data = phc6089.penngolf noobs;
  id name;
  var year type par yards;
run;
 
ods html close;
ods html;
SAS 出力

Some of the penngolf data set variables

Name Year Type Par Yards
Toftrees 1968 Resort 72 7018
Penn State Blue 1921 Public 72 6525
Centre Hills 1921 Private 71 6392
Lewistown CC . Private 72 6779
State College Elks 1973 SemiPri 71 6369
Park Hills CC 1966 SemiPri 70 6004
Sinking Valley CC 1967 SemiPri 72 6755
Williamsport CC 1909 Private 71 6489
Standing Stone GC 1973 SemiPri 70 6593
Bucknell GC 1960 SemiPri 70 6253
Mount Airy Lodge 1972 Resort 72 7123

ご覧のように、使用するスタイルを指定するのは、ODS HTML ステートメントに STYLE= オプションを追加するだけという簡単なことです。プログラムを開いて実行し、出力からスタイルmeadowのテンプレートを使用して作成された HTML 出力の外観を確認してください。

もちろん、あなたは「どうすれば meadow が利用可能な事前定義されたスタイルということがわかりますか?」と気になっているでしょう。幸いなことに、その答えは非常に簡単です。次の TEMPLATE プロシージャは、システムで使用可能な事前定義されたスタイル テンプレートのリストを出力します。

PROC TEMPLATE;
    LIST STYLES;
RUN;

プログラムを開いて実行し、出力から事前定義されたスタイルのリストを確認してください。いくつかのスタイルを自分で試してみるのも良いでしょう。私はいくつかのスタイルは非常に優れていると思いますが、いくつかはあまりよくない(そのため私にとって役に立たない)と感じています。

プロシージャの出力からデータセットを作成する#

以前、MEANS プロシージャで OUTPUT ステートメントを使用して、平均や標準偏差などの要約統計量を含むデータセットを作成したことを思い出してください。このセクションでは、代わりに ODS を使用して最初に要約統計量を保存し、その後 出力先OUTPUTに出力できることを示します。実際には、ODSを使用してほぼすべてのプロシージャの出力の任意の部分を保存できます!

#

次のプログラムは、ODS OUTPUT ステートメントを使用して、MEANS プロシージャによって作成された 出力オブジェクトSummary から一時データセットsummoutを作成し、その後、作成されたデータセットsummoutを出力します。

title 'Pennsylvania Golf Courses by Par';
ods output Summary = summout;
proc means data = golfbypar;
  by par;
  var yards;        
run;

title 'The summout data set'; 
proc print data = summout noobs;   
run;
SAS 出力

Pennsylvania Golf Courses by Par

MEANS プロシジャ

分析変数 : Yards
N 平均 標準偏差 最小値 最大値
3 6283.33 295.6692972 6004.00 6593.00
分析変数 : Yards
N 平均 標準偏差 最小値 最大値
3 6416.67 63.6893502 6369.00 6489.00
分析変数 : Yards
N 平均 標準偏差 最小値 最大値
5 6840.00 235.5546646 6525.00 7123.00

The summout data set

Par Yards_N Yards_Mean Yards_StdDev Yards_Min Yards_Max
70 3 6283.3333333 295.66929724 6004 6593
71 3 6416.6666667 63.689350235 6369 6489
72 5 6840 235.55466457 6525 7123

このコードからではわからないことですが、出力オブジェクトの名前であるSummary は、最初に MEANS プロシージャをトレースすることによって確認されました。前の例で ODS TRACE を使用してログに表示された情報に戻ると、MEANS プロシージャのすべての出力の情報を取得しようとしたので、目的の出力オブジェクトは Summary と呼ばれていることがわかります。ODS OUTPUT ステートメントは、Summary 出力オブジェクトに含まれるデータを データセットsummoutに保存することを指定します。もちろん、PRINT プロシージャは、その後データセットsummoutを出力するように指示します。プログラムを開いて実行し、出力からデータセットsummoutが実際に MEANS プロシージャによって要約されたデータを含んでいることを確認してください。

プログラムで ODS ステートメントを記載する場所には注意が必要です。たとえば、ODS OUTPUT ステートメントを MEANS プロシージャの RUN ステートメントの直前に配置するのではなく、MEAN プロシージャの RUN ステートメントの後や、PROC PRINT ステートメントの前に配置した場合、Summary データセットは取得されません。代わりに、次の警告メッセージが表示されます。

 WARNING: 出力'Summary'は作成されていません。出力オブジェクト名、ラベル、
          パスが正しく記述されているかを確認してください。また、
          要求した出力オブジェクトを作成するために、適切なプロシジャオプションが使われ
          ているかも確認してください。たとえば、
          NOPRINTオプションが使われていないことを確認してください。

ODS ステートメントを説明のとおりに移動させて、プログラムを再実行し確認してみてください。

プロット オプションを使用してグラフの外観を制御する#

ODS Graphics プロシージャを使用すると、グラフ内の特定のグラフィック要素の外観をコントロールすることもできます。グラフ要素には、線、棒、マーカー、テキストなどがあります。

多くの ODS Graphics プロシージャのステートメントには、プロットまたはグラフのさまざまな部分の外観を制御するオプションとサブオプションがあります。さまざまなグラフ要素のデフォルトの視覚属性は、アクティブなスタイルの特定のスタイル要素から派生します。プロシージャステートメントで外観オプションを使用することにより、全体的なスタイルを変更せずに、グラフの 1 つまたは複数の側面の外観を変更できます。

以降の例のほとんどでは、子どもの死亡率データ indicatordeadkids35.csv を使用します。

filename mortcsv '/folders/myfolders/SAS_Notes/data/indicatordeadkids35.csv';

proc import datafile = mortcsv 
            out = mort(rename=(VAR1=Country)) 
            dbms = CSV 
            replace;
  getnames = yes;
  guessingrows = max;
run;

data long;
  set mort;
  array years[*] '1760'n -- '2009'n  '2010'n '2030'n '2050'n '2099'n;
  do i = 1 to dim(years);
    year = input(vname(years[i]), 4.);
    morts = years[i];
    output;
  end;
  drop i '1760'n -- '2009'n  '2010'n '2030'n '2050'n '2099'n;
run;

proc contents data = long;
run;

proc print data = long (obs = 5);
run;
SAS 出力

The summout data set

CONTENTS プロシジャ

データセット名 WORK.LONG オブザベーション数 50038
メンバータイプ DATA 変数の数 3
エンジン V9 インデックス数 0
作成日時 2024/06/06 08:25:37 オブザベーションのバッファ長 2632
更新日時 2024/06/06 08:25:37 削除済みオブザベーション数 0
保護   圧縮済み NO
データセットタイプ   ソート済み NO
ラベル      
データ表現 SOLARIS_X86_64, LINUX_X86_64, ALPHA_TRU64, LINUX_IA64    
エンコード utf-8 Unicode (UTF-8)    
エンジン/ホスト関連情報
データセットのページサイズ 131072
データセットのページ数 1022
データページの先頭 1
ページごとの最大OBS数 49
先頭ページのOBS数 48
データセットの修復数 0
ファイル名 /saswork/SAS_work40FC0000C73A_odaws01-apse1.oda.sas.com/SAS_work2DB50000C73A_odaws01-apse1.oda.sas.com/long.sas7bdat
作成したリリース 9.0401M7
作成したホスト Linux
I ノード番号 2063020
アクセス権限 rw-r--r--
所有者名 user-name
ファイルサイズ 128MB
ファイルサイズ (バイト) 134086656
変数と属性リスト (アルファベット順)
# 変数 タイプ 長さ 出力形式 入力形式
1 Country 文字 2614 $2614. $2614.
3 morts 数値 8    
2 year 数値 8    

The summout data set

OBS Country year morts
1 Afghanistan 1760 .
2 Afghanistan 1761 .
3 Afghanistan 1762 .
4 Afghanistan 1763 .
5 Afghanistan 1764 .

SGPLOT プロシージャ#

外観をカスタマイズする方法に移る前に、PROC SGPLOT を使用して基本的なプロットを作成する方法を簡単に確認しましょう。PROC SGPLOT は、対応するステートメントを使用して、多くの一般的なプロットを作成するために使用できます。

  • SCATTER - 散布図を作成します。

  • VBOX/HBOX - 垂直/水平箱ひげ図を作成します。

  • SERIES - 線/系列プロットを作成します。

  • DENSITY - 密度プロットを作成します。

  • HISTOGRAM - ヒストグラムを作成します。

  • REG - プロットに最小二乗回帰線を追加します。

  • LOESS - プロットにノンパラメトリックな平滑化曲線を追加します。

たとえば、年と死亡率の散布図などを作成できます。Swedenのデータに対してこれを実行してみましょう。

data sweden_long;
  set long;
  where country = "Sweden";
run;

proc sgplot data = sweden_long;
  scatter y = morts x = year;
run;
SAS 出力
SGPlot プロシジャ

SCATTER を SERIES に変更するだけで、線グラフを作成することもできました。

proc sgplot data = sweden_long;
  series y = morts x = year;
run;
SAS 出力
SGPlot プロシジャ

LOESS ステートメントを使用すると、このデータにノンパラメトリックな平滑化した曲線を追加し、系列プロットの上にプロットすることもできます。

proc sgplot data = sweden_long;
  series y = morts x = year;
  loess  y = morts X = year / smooth = 0.45 CLM;
run;
SAS 出力
SGPlot プロシジャ

次に、”United States”、”United Kingdom”、”Sweden”、”Afghanistan”、”Rwanda”の各国の線グラフを作成し、時間の経過に伴う死亡率を見てみましょう。各国の線グラフを個別に取得するには、GROUP= オプションを指定して、国の変数を割り当てる必要があります。

data sub;
  set long;
  where country in ("United States" "United Kingdom" 
                    "Sweden" "Afghanistan" "Rwanda");
run;

proc sgplot data = sub;
  series y = morts x = year / group = country;
run;
SAS 出力
SGPlot プロシジャ

これらの 5 つの国のそれぞれについて、時間の経過に伴う死亡率の軌跡が 1 つのプロットに表示されることに注意してください。PROC SGPLOT は、各グループを区別し、凡例を提供するために、自動的にデフォルトの色を割り当てます。これらは後で変更する方法を学びます。

vbox/hbox の category= オプションを使用すると、国別に並べて箱ひげ図を作成することもできます。

proc sgplot data = sub;
  vbox morts / category = country;
run;
SAS 出力
SGPlot プロシジャ

軸とタイトル#

グラフの調整として最初に扱うのは、説明的な軸ラベルとタイトルを追加する方法です。XAXIS および YAXIS LABEL= オプションを使用して軸ラベルを設定できます(または、データステップで変数にラベルを設定することもできます)。さまざまなレベルのタイトルを設定するには、TITLE ステートメントを使用します。TITLE ステートメントでは、TITLE1-TITLE10 を使用できます。TITLE の番号が大きくなるにつれて、タイトルのサイズは小さくなります。そのため、サブタイトルを作成できます。TITLE ステートメントはグローバルであり、SGPLOT の一部ではないため、別のプロットを作成する前に、これらのステートメントをリセットするか、変更する必要があります。そうしないと、同じタイトルが引き継がれてしまいます。

title "Child Mortality Rates";
title2 "Stratified by Country";
proc sgplot data = sub;
  series y = morts x = year / group = country;
  xaxis label = "Year";
  yaxis label = "Mortality Rate";
run;
SAS 出力
SGPlot プロシジャ

XAXIS および YAXIS ステートメントの MIN= および MAX= オプションを使用して、x 軸と y 軸の制限を調整できます。たとえば、1900 年から 2000 年で、死亡率が 下から3つの目盛までの0 から 1.5 の範囲に拡大できます。

title "Child Mortality Rates";
title2 "Stratified by Country";  
proc sgplot data = sub;
  series y = morts x = year / group = country;
  xaxis label = "Year" min = 1900 max = 2000;
  yaxis label = "Mortality Rate" min = 0 max = 1.5;
run;
SAS 出力
SGPlot プロシジャ

x 軸または y 軸のデフォルトの目盛りを変更することもできます。これは、XAXIS および YAXIS ステートメントの VALUES= オプションを使用して行うことができます。

title "Child Mortality Rates";
title2 "Stratified by Country";
proc sgplot data = sub;
  series y = morts x = year / group = country;
  xaxis label = "Year" values = (1750 to 2100 by 50);
  yaxis label = "Mortality Rate" values = (0 to 5 by 0.5);
run;
SAS 出力
SGPlot プロシジャ

これらの目盛りに表示されるテキストを実際の数字とは異なるものに変更したい場合、VALUESDISPLAY=オプションを使用します。

title "Child Mortality Rates";
title2 "Stratified by Country";
proc sgplot data = sub;
  series y = morts x = year / group = country;
  xaxis label = "Year" values = (1750 to 2100 by 50)
        valuesdisplay = ('a' 'b' 'c' 'd' 'e' 'f' 'g' 'h');
  yaxis label = "Mortality Rate" values = (0 to 5 by 0.5);
run;
SAS 出力
SGPlot プロシジャ

XAXISとYAXISのステートメントでは、色、フォント、位置、回転など、軸とラベルテキストを変更するための他のオプションも提供されています:

  • FITPOLICY= - 通常描画するのに十分なスペースがない場合に、水平軸上の目盛りの値をどのようにフィットさせるかを指定します。

  • LABELATTRS= - 軸ラベルの見た目を指定します。

  • LABELPOS= - 軸ラベルの位置を指定します。

  • VALUEATTRS= - 軸の目盛りの値のラベルの見た目を指定します。

  • VALUESROTATE= 軸上の目盛りの値がどのように回転するかを指定します。可能なオプションはDIAGONAL | DIAGONAL2 | VERTICALです(これは軸テキストが重なっている場合にのみ適用されます。強制的に回転させるには、FITPOLICYをROTATEALWAYSに設定する必要がありますが、これはSAS 9.4M7以降でのみ動作します。それ以外の場合は、ANNOTATIONデータセットを使用する必要があります)。

タイトルのテキストの見た目を調整するために、TITLEステートメントで同様のテキストオプションを指定することができます。

title height = 1cm justify = C bold color = 'red' "Child Mortality Rates";
title2 height = 0.5cm bold justify = C "Stratified by Country";
proc sgplot data = sub;
  series y = morts x = year / group = country;
  * Note: The VALUESROTATE option only works here on SAS version 9.4M7 and later;
  xaxis label = "Year" fitpolicy=rotatealways valuesrotate = diagonal2
        valueattrs = (size = 8) labelattrs = (size = 15);
  yaxis label = "Mortality Rate " valueattrs = (size = 8)
        labelattrs = (size = 15);
run;
SAS 出力
SGPlot プロシジャ

グラフの文字、線種、色#

グループ化変数を使用しない基本的なプロットの場合、対応するATTRSオプションを使用してこれらの視覚的特性を変更できます。

  • MARKERATTRS= - 色、サイズ、プロット文字などのプロット文字の視覚的外観を変更します(詳細については、マーカー属性とシンボルを参照してください)。

  • LINEATTRS - 色、線種、太さなどの線の視覚的外観を変更します(詳細については、線属性とパターンを参照してください)。

例として、Swedenの死亡率対年の散布図にプロットされるマーカーを赤い三角形に変更してみましょう。

title ; *Reset the titles;
title2 ;
proc sgplot data = sweden_long;
  scatter y = morts x = year 
      / markerattrs=(color = 'red' symbol = triangle);
run;
SAS 出力
SGPlot プロシジャ

またSERIESプロットで直線の青い線を点線のオレンジ色の線に変更することもできます。

proc sgplot data = sweden_long;
  series y = morts x = year 
      / linerattrs=(color = 'orange' pattern = dash);
run;
SAS 出力
SGPlot プロシジャ

これらの属性を手動で設定するには、dattrmap=オプションとattrid=オプションに渡すattribute map(属性マッピングデータセット)を使用する必要があります。この属性マッピングデータセットは、グループ化変数の値と色、線種、プロット文字などのさまざまな属性へのマッピングを定義します。

属性マッピングデータセットを作成するには、次の文字変数を使用してデータステップでデータセットを作成する必要があります。

  • ID - 必須の文字変数で、単一の属性マップに対応するすべての行を識別します。

  • VALUE - 必須の文字変数で、現在の行でマッピングされているグループ化変数の値を識別します。

  • 他の属性変数 - これらは、linecolorやmarkercolorなどの予約キーワードになります(属性マップデータセットを参照して、データマップで使用できる予約属性キーワードの完全なリストを確認してください)。

データセットには、IDとVALUEの2つの変数が必要です。属性マッピングがPROC SGPLOTで機能するには、属性マッピングデータセットでこれらの変数を使用する必要があります。

例として、次のデータ属性マッピングは、死亡率対年の散布図で各国に割り当てられているマーカーと色を変更します。

data marker_map;
  input id $2. +1 VALUE $15. MARKERSYMBOL $8. MARKERCOLOR $10.;
  VALUE = strip(value);
  datalines;
ms Afghanistan    X        blue
ms Rwanda         Diamond  light blue
ms Sweden         plus     green
ms United Kingdom triangle purple
ms United States  circle   red
;
run;

proc sgplot data = sub dattrmap = marker_map;
  scatter y = morts x = year / group = country attrid = ms;
run;
SAS 出力
SGPlot プロシジャ

SASの色に関する詳細については、Color-Naming Schemesを参照してください。

同様に、線の属性を変更する属性マッピングデータを作成します。

data line_map;
  input id $2. +1 VALUE $15. LINEPATTERN $9. +1 LINECOLOR $10.;
  VALUE = strip(value);
  datalines;
lp Afghanistan    Solid     blue
lp Rwanda         Dash      light blue
lp Sweden         Dot       green
lp United Kingdom LongDash  purple
lp United States  ShortDash red
;
run;

proc sgplot data = sub dattrmap = line_map;
  series y = morts x = year / group = country attrid = lp;
run;
SAS 出力
SGPlot プロシジャ

複数の属性マップを単一のデータセットに結合して、マーカーと線種の両方など、さまざまに見た目を調整することもできます。

data my_map;
  input id $2. +1 VALUE $15. LINEPATTERN $9. +1 LINECOLOR $10. +1 
        MARKERSYMBOL $8. MARKERCOLOR $10.;
  VALUE = strip(value);
  datalines;
am Afghanistan    Solid     blue       X         blue
am Rwanda         Dash      light blue Diamond   light blue 
am Sweden         Dot       green      plus      green
am United Kingdom LongDash  purple     triangle  purple
am United States  ShortDash red        circle    red
;
run;

proc sgplot data = sub dattrmap = my_map;
  scatter y = morts x = year / group = country attrid = am;
  series y = morts x = year / group = country attrid = am;
run;
SAS 出力
SGPlot プロシジャ

凡例の変更#

PROC SGPLOTの凡例を変更するには、KEYLEGENDステートメントを使用できます。たとえば、凡例のタイトルを変更するには、KEYLENGNDでTITLE=オプションを使用します。グループ化変数によって作成されたラベルを変更するには、フォーマットを適用する必要があります。

proc format;
  value $countryfmt
    "Afghanistan" = "Country 1"
    "Rwanda" = "Country 2"
    "Sweden" = "Country 3"
    "United Kingdom" = "Country 4"
    "United States" = "Country 5";
run;

proc sgplot data = sub;
  series y = morts x = year / group = country;
  keylegend / title = "COUNTRY";
  format country $countryfmt.;
run;
SAS 出力
SGPlot プロシジャ

凡例を非表示にするには、PROC SGPLOTでNOAUTOLEGENDオプションを使用します。KEYLEGENDステートメントで凡例オプションを手動で設定した場合、NOAUTOLEGENDオプションは無視されるため、凡例を抑制するにはKEYLEGENDステートメントを削除する必要があります。

proc sgplot data = sub noautolegend;
  series y = morts x = year / group = country;
run;
SAS 出力
SGPlot プロシジャ

KEYLEGENDのPOSITIONオプションを使用して、凡例の位置を変更できます。POSITIONは、bottom、bottomleft、bottomright、left、right、top、topleft、toprightの値を取ることができます。LOCATION=INSIDEを指定することで、凡例をプロット領域内に移動することもできます。凡例の行と列の数を設定するには、ACROSS=および/またはDOWN=オプションを使用します。

proc sgplot data = sub noautolegend;
  series y = morts x = year / group = country;
  keylegend / position = right;
run;
SAS 出力
SGPlot プロシジャ
proc sgplot data = sub noautolegend;
  series y = morts x = year / group = country;
  keylegend / position = topleft location=inside across=2;
run;
SAS 出力
SGPlot プロシジャ

TITLEATTRS=とVALUEATTRS=オプションを使用して、凡例内のテキストの外観を変更できます。これらのオプションは、前に見た色、サイズ、フォントなどのさまざまなテキストのスタイルを受け取ります。

proc sgplot data = sub noautolegend;
  series y = morts x = year / group = country;
  keylegend / position = right across=2
              titleattrs=(color='red' size=2cm)
              valueattrs=(color='blue' style=italic);
run;
SAS 出力
SGPlot プロシジャ

テキスト注釈の追加#

PROC SGPLOTからプロットにテキストを追加するには、3つの方法があります。

  • INSET

  • TEXT

  • SGANNO

最初の例では、INSETステートメントを使用して、相関係数値を散布図に追加します。

proc sgplot data=mort;
  scatter y = '2000'n x = '1980'n;
  inset ("r: 0.89" = "") / position = topleft title = "Pearson Correlation" 
                           labelalign = center;
run;
SAS 出力
SGPlot プロシジャ

テキストを追加する2番目の方法は、TEXTステートメントによる表示を使用することです。これは、グラフ内の関連付けられた(X、Y)位置にテキストを表示します。

data mort;
  set mort ;
  length text $17;
  if '2000'n > 2.5 then text = ("2000 rate = " || '2000'n);
run;

proc sgplot data=mort;
  scatter y = '2000'n x = '1980'n;
  text y = '2000'n x = '1980'n text=text / position = bottom textattrs=(size=10);
run;
SAS 出力
SGPlot プロシジャ

テキストを追加する3番目の方法は、SGANNOを使用することです。この方法を使用するには、プロットに追加するテキストラベルを含む別のアノテーションデータセットを作成します。

data mort_anno;
  length label $50 x1space $20 y1space $20;
  input function $ label $ x1 y1 width x1space $ y1space $
        textsize;
  infile datalines dsd;
  datalines;
text,Pearson's correlation coefficient is 0.89,35,80,500,graphpercent,graphpercent,11
;
run;

proc sgplot data=mort sganno=mort_anno;
  scatter y = '2000'n x = '1980'n;
run;
SAS 出力
SGPlot プロシジャ

詳細については、Yaqi JiaのThree Ways to Add Text to Graphics in PROC SGPLOTを参照してください。

単一の図に複数のグラフを描画する#

密集したグラフを、いくつかのグループ化によってより小さな別々のプロットに分割したい場合は、PROC SGPANELを使用できます。例として、死亡率データサブセットのloess曲線を含む5つの別々の散布図を作成したい場合、PROC SGPLANELを使用して、これらの散布図を1つのパネルにプロットするのではなく、5つの別々のプロットに分割できます。

proc sgpanel data = sub noautolegend;
  panelby country; 
  scatter y = morts x = year / group = country;
  loess y = morts x = year / group = country;
  format country $20.;
run;
SAS 出力
SGPanel プロシジャ

PANELBYのROWS=とCOLUMNS=オプションを使用して、レイアウトと行と列の数を調整できます。

proc sgpanel data = sub noautolegend;
  panelby country / rows=1 columns=5; 
  scatter y = morts x = year / group = country;
  loess y = morts x = year / group = country;
  format country $20.;
run;
SAS 出力
SGPanel プロシジャ

複数の異なるプロットを単一の図に含めるには、ODS GRAPHICSのGRIDDED LAYOUT機能を使用できます。レイアウトを作成するには、最初にグリッドレイアウトを有効にして、行と列の数を指定して形式を定義する必要があります。次に、ODS REGIONステートメントを使用して、グリッドの各部分に何が含まれるかを分割します。

proc glm data = mort(keep='2000'n '1980'n) noprint;
  model '2000'n = '1980'n;
  output out=fitstat residuals = resid predicted = fitted;
run;

proc print data = fitstat(obs=5);
run;
SAS 出力
OBS 1980 2000 resid fitted
1 3.490352139 2.811858292 0.50536 2.30650
2 0.334426215 0.126746215 0.00002 0.12673
3 1.216621171 0.216880367 -0.51917 0.73605
4 3.139291928 2.484475049 0.42045 2.06403
5 0.301924994 0.140326167 0.03605 0.10428
ods layout gridded columns = 2 rows = 2;
ods region;
proc sgplot data = fitstat;
  histogram resid;
run;

ods region;
proc sgplot data = fitstat;
  scatter y = resid x = fitted;
  refline 0 / axis = y;
run;

ods region;
proc sgplot data = fitstat;
  reg y = '2000'n x = '1980'n;
run;

ods region;
proc sgplot data = fitstat;
  scatter y = resid x = '1980'n;
  refline 0 / axis = y;
run;

ods layout end;
SAS 出力

これらのプロットを保存するには、前に触れたODSの出力先でPDFやRTFなどを指定すれば、外部のファイルに保存することができます。

演習#

これらの演習問題では、charm city循環バスの乗客数データCharm_City_Circulator_Ridership.csvを使用します。PC上のデータセットへのパスを変更した後、以下のコードを使用してデータセットを読み込み、グラフに使用できるように加工します。

proc import datafile = "/folders/myfolders/SAS_Notes/data/Charm_City_Circulator_Ridership.csv"
            out = circ dbms = csv replace;
  getnames = yes;
  guessingrows = max;
run;

data long;
  set circ;
  array larray[*] orangeBoardings -- bannerAverage;
  do i = 1 to dim(larray);
    var = vname(larray[i]);
    number = larray[i];
    var = tranwrd(var, 'Board', ' Board');
    var = tranwrd(var, 'Alight', ' Alight');
    var = tranwrd(var, 'Average', ' Average');
    route = scan(var, 1);
    type = scan(var, 2);
    output;
  end;
   
  drop i var orangeBoardings -- bannerAverage;
run;

data avg;
  set long;
  where type = 'Average' and number ^= .;
run;

proc print data = long(obs = 10);
run;

proc print data = avg(obs=10);
run;
SAS Output

The SAS System

Obs day date daily number route type
1 Monday 01/11/2010 952 877 orange Boardings
2 Monday 01/11/2010 952 1027 orange Alightings
3 Monday 01/11/2010 952 952 orange Average
4 Monday 01/11/2010 952 . purple Boardings
5 Monday 01/11/2010 952 . purple Alightings
6 Monday 01/11/2010 952 . purple Average
7 Monday 01/11/2010 952 . green Boardings
8 Monday 01/11/2010 952 . green Alightings
9 Monday 01/11/2010 952 . green Average
10 Monday 01/11/2010 952 . banner Boardings

The SAS System

Obs day date daily number route type
1 Monday 01/11/2010 952 952.0 orange Average
2 Tuesday 01/12/2010 796 796.0 orange Average
3 Wednesday 01/13/2010 1211.5 1211.5 orange Average
4 Thursday 01/14/2010 1213.5 1213.5 orange Average
5 Friday 01/15/2010 1644 1644.0 orange Average
6 Saturday 01/16/2010 1490.5 1490.5 orange Average
7 Sunday 01/17/2010 888.5 888.5 orange Average
8 Monday 01/18/2010 999.5 999.5 orange Average
9 Tuesday 01/19/2010 1035 1035.0 orange Average
10 Wednesday 01/20/2010 1395.5 1395.5 orange Average
  1. データセットavgから日付ごとの平均乗客数の散布図を作成してください。 a. ポイントの色をルート(オレンジ、パープル、グリーン、バナー)で色分けしてください。ここではデフォルトの色で構いません。 b. 各ルートに対して黒い滑らかな曲線(LOESS)を追加してください。 c. ポイントの色を曜日ごとにしてください。

  2. ポイントの色がルートの名前(バナー→青)である1aを再プロットしてください。注:属性マッピングデータを作成する必要があります。

  3. ルートごとにパネルを1つずつ持つ、日付ごとの平均乗客数の散布図を作成してください。

  4. 曜日ごとに別々のパネルを持ち、ルートで色分けされた、日付ごとの平均乗客数の散布図を作成してください。

  5. ルートで色分けされた(1aと同じ)、日付ごとの平均乗客数(avg)の散布図を作成してください。(平均を算出はせず、各ルートの平均の列を使用します)。x軸のラベルを”Year”、y軸のラベルを”Number of People”にします。

  6. オレンジルートの日付に対する平均乗客数の線グラフを作成し、乗車数(boardings)と降車数(alightings)も誤差線として破線にして追加してください。線の色はオレンジにします。