GTLで棒グラフを作図する場合はbarchartステートメントかbarchartparmステートメントを使用します。
両者の違いは以前の記事を見てください。
barchartステートメント
カテゴリ変数と応答変数を指定して棒グラフを作成します。
barchartparmステートメントを使用する場合は、カテゴリ変数の値は重複がないようにしなければなりません。barchartステートメントを使用する場合はstatオプションで作図する統計量を指定しましょう。
エラーバーを表示したい場合はerrorlowerとerrorupperオプションでエラーバー下限と上限の変数をします。
棒グラフの向きはorientオプションで指定します。
棒グラフを縦方向に作図する場合、カテゴリ変数はX軸(横軸)で、応答変数はY軸(縦軸)となります。棒グラフを横方向に作図する場合は逆になります。
SAS9.4M3以前はカテゴリ軸は離散変数軸しか選べませんでしたが、M3以降は線形、対数、および時系列軸を選択できるようになりました。
クラスター表示
groupオプションを指定すると指定した変数ごとに棒グラフを作成できます。棒グラフの配置方法はclusterとstackedがあり、groupdisplayオプションで指定できます。
試しに以下のデータを作図してみます。まずはクラスター表示
cat | level | mean | lower | upper |
---|---|---|---|---|
男 | グループ1 | 7.0 | 6.5 | 7.5 |
男 | グループ2 | 9.2 | 8.7 | 9.7 |
男 | グループ3 | 11.9 | 11.4 | 12.4 |
男 | グループ4 | 5.7 | 5.2 | 6.2 |
男 | グループ5 | 15.2 | 14.7 | 15.7 |
女 | グループ1 | 14.6 | 14.1 | 15.1 |
女 | グループ2 | 17.8 | 17.3 | 18.3 |
女 | グループ3 | 2.9 | 2.4 | 3.4 |
女 | グループ4 | 5.3 | 4.8 | 5.8 |
女 | グループ5 | 9.5 | 9.0 | 10.0 |
proc template;
define statgraph bar;
begingraph;
layout overlay;
barchartparm category=cat response=mean /
name="bar"
group=level
groupdisplay=cluster
errorlower=lower
errorupper=upper
errorbarattrs=(color=black);
discretelegend "bar";
endlayout;
endgraph;
end;
run;
ちなみにorient=horizontalを指定して横方向に配置するとこんな感じ
積み上げ棒グラフ
groupdisplay=stackにするといわゆる積み上げ棒グラフとなります。当然ですがこの表示の場合エラーバーは表示できません。
proc template;
define statgraph bar;
begingraph;
layout overlay;
barchartparm category=cat response=mean /
name="bar"
group=level
groupdisplay=stack;
discretelegend "bar";
endlayout;
endgraph;
end;
run;
積み上げ棒グラフの場合、度数ではなくパーセントを表示することが多いです。GTLでパーセント積み上げグラフを作図する場合は、あらかじめ比率を算出して作図するのも手ですが、group100オプションでmagnitudeを指定すると、各カテゴリごとに自動で標準化してくれます。
magnitudeは負の値も許容しますが、positveを指定すると負の値はプロットされません。
proc template;
define statgraph bar;
begingraph;
layout overlay;
barchartparm category=cat response=mean /
name="bar"
group=level
groupdisplay=stack
group100=magnitude;
discretelegend "bar";
endlayout;
endgraph;
end;
run;
各カテゴリのグループの合計は必ず100%になりますので、各グループがカテゴリ全体に占める割合の違いを把握しやすくなります。
セグメントラベルを表示する
セグメントラベルはバーの内部に表示するラベルです。
セグメントラベルは各グループの応答変数の値を表示します。ただし任意の変数の値を表示することはできません。
セグメントラベルはsegmentlabeltype=autoにすると表示できます。またsegmentlabelformatオプションでラベルのフォーマットを、segmentlabelattrsオプションでラベルの表示設定を設定できます。
ods output CrossTabFreqs=stat;
proc freq data=sashelp.cars;
tables origin*type;
run;
proc template;
define statgraph barchart;
begingraph / attrpriority=none;
entrytitle "Percentage of Total Models by Type and Origin";
layout overlay;
barchartparm x=type response=colpercent /
name="carmodels"
group=origin
groupdisplay=stack
segmentlabeltype=auto
segmentlabelformat=5.1
segmentlabelattrs=(color=white size=12);
discretelegend "carmodels";
endlayout;
endgraph;
end;
run;
proc sgrender data=stat template=barchart;
label colpercent="Percent";
where origin^="" and colpercent^=.;
run;
データラベルを表示する
データラベルは棒の末端に表示するラベルです。
groupdisplay=clusterの場合のみ有効となります。データラベルは任意の変数を指定することが可能です。
表示するにはdatalabelオプションでラベル変数を指定します。あるいはdatalabeltype=autoにすることで応答変数の値を表示することができます。
datalabelattrsでデータラベルの表示設定を指定できます。
proc freq data=sashelp.cars;
tables type / out=stat;
run;
proc template;
define statgraph barchart2;
begingraph / attrpriority=none;
layout overlay;
barchartparm x=type response=count /
name="carmodels"
datalabel=count
datalabelattrs=(size=12 color=red);
discretelegend "carmodels";
endlayout;
endgraph;
end;
run;
proc sgrender data=stat template=barchart2;
run;