SAS9.2以降、SG系グラフの登場により、グラフの表現力はケタ違いにアップしましたが、その代わり、最初のハードルも随分高くなってしまった気がします。
いきなりGTLガリガリ書いてグラフを作るのは、ちょっと難しいので、最初のうちは
SASのグラフサンプル集http://support.sas.com/sassamples/graphgallery/PROC_SGRENDER.html
やSASユーザー総会で公開されているものや、或いは書籍、コピペして、少しずつカスタマイズして
自分のものにしていくのがいいと思います。
リンクさせていただいている「僕の頁 <SASと臨床試験と雑談と>」(http://sasboku.blog.fc2.com/)
にもGTLを使ったプロットが公開されていて勉強になります。
で、今回紹介するのは、それとは違ったアプローチです。
GUI、ようはプログラムを書かずに手でグラフを書いて、それを自動的にコード化する話です。
まず、適当なデータをつくります。
data TEST;
call streaminit(2014);
do GROUP='A','B';
do i=1 to 100;
x=rand('uniform');
y=rand('uniform');
output;
end;
end;
drop i;
run;
そしたら、まず、SASをインストールする時に、ODS Graphics Editerにチェックをつけた人は、すでにアイコンがあるか、すべてのプログラムから立ち上げられるので、そうしてください。
もし、そういったものが見当たらない人は
%sgdesign;
とエディタに書いて、実行してください。
何かが裏で凄い動いた感じがして、10数秒後、
こんな画面がでてきます。
ここで、いろんな形のグラフを選ぶことで、実は相当高度なグラフもかけます。
試しにグラフギャラリーから「グループ化散布図」でも選んでみましょう
グラフを選ぶと、次はグラフに使うデータセットを指定します。
デフォルトがなぜかSASHELPなので、参照元にするライブラリを指定します。
※ちなみにここで、%sgdesign;で起動した人は、WORKの中をみてみましょう。
わけわかんないデータセットであふれているはずですが、これは、グラフを書くサンプル用の
データセットを勝手に用意してくれいるんです。迷惑です。
で、最初につくったデータセットを指定します
そしたら
X軸に対応する変数とY軸に対応する変数、そしてグループ化する変数をプルダウンで
選びます。
そしたら、それだけで、グラフがポンとでてきます。
で、なんと、そのグラフを手で修正できます。
まずはグラフタイトルをクリックして、好きなタイトルにします
右クリックで、軸や背景などのいろんなプロパティをいじれます。
感覚的にはEXCELのグラフを編集するのと全く同じです。
背景色を灰色にしてみました。
要素の追加で、さらにプロットを重ねたり
フリーテキストや凡例などを追加できます
凡例を追加してみました
やりたい放題やって、気がすんだら、ここからが本番
表示から「コード」をクリックすると

なんと、proc templateでのテンプレート定義から
proc sgrenderの実行までを全てコード化してくれます。
プロットに指定した変数はdynamicステートメントで受け渡すことを想定したコード化を
してくれるので、標準化もしやすく、超便利。
あとはこれをエディタにペタ
proc template;
define statgraph sgdesign;
dynamic _X _Y _GROUP;
begingraph / backgroundcolor=CXE8E6E8;
entrytitle _id='title' halign=center '散布図ですわ' /;
entryfootnote _id='footnote' halign=left 'Type in your footnote...' /;
layout lattice _id='lattice' / columndatarange=data columngutter=10 rowdatarange=data rowgutter=10;
layout overlay _id='overlay' / xaxisopts=(gridDisplay=on label='X軸のラベルも自由') yaxisopts=(linearopts=(viewmin=0.2 viewmax=0.9 ) tickvalueattrs=(size=12) gridDisplay=on type=linear);
scatterplot _id='scatter' x=_X y=_Y / group=_GROUP name='scatter';
discretelegend _id='legend' 'scatter' / border=true displayclipped=true down=1 halign=center location=inside opaque=false order=columnmajor valign=top;
endlayout;
endlayout;
endgraph;
end;
run;
proc sgrender data=WORK.TEST template=sgdesign;
dynamic _X="X" _Y="Y" _GROUP="GROUP";
run;
で実行するだけで
さっきまで、手でいじって作ってたグラフが、ポンです。
これは、GTLを勉強するとき、何と何が結びついているかを理解する上でも、大変役立ちますね。
レイアウト分割の複合グラフを、一からコードで起こすのは、まあ、なかなか、つらいですよね、それはそれで勉強になるけども












