GTLではeval関数を使うことでwhereステートメントに似た処理を実施することができます。
構文
eval(sas function, logical operation, or arithmetic calculation)
eval関数の処理対象は定数、カラム(データセットの変数に相当)文字列です。
SAS関数や数値の演算を実行することも可能です。
利用例
東京都の新型コロナウィルス陽性患者数の推移をプロットします。フットノートには出力日を記載します。
出力日はeval関数とtoday関数で取得します。
またLOG=1を代入するとY軸を対数軸に切り替えます。
なおデータは以下からダウンロードできます。
https://catalog.data.metro.tokyo.lg.jp/dataset/t000010d0000000068/resource/c2d997db-1450-43fa-8037-ebb11ec28d4ccatalog.data.metro.tokyo.lg.jp
/*公表日毎に集計*/
proc freq data=raw noprint;
tables date /out=ds1;
run;
proc template;
define statgraph mygraph;
begingraph;
dynamic _DATE _PAT _LOG;
entrytitle "東京都_新型コロナウイルス陽性患者発表詳細";
entryfootnote "出力日: " eval(put(today(), NLDATE.));
if (_LOG=1)
layout overlay /
xaxisopts=(label="公表日" timeopts=(interval=week))
yaxisopts=(label="患者数(対数)" type=log);
seriesplot x=_DATE y=_PAT;
endlayout;
else
layout overlay /
xaxisopts=(label="公表日" timeopts=(interval=week))
yaxisopts=(label="患者数");
seriesplot x=_DATE y=_PAT;
endlayout;
endif;
endgraph;
end;
run;
proc sgrender data=ds1 template=mygraph;
dynamic _DATE="DATE"
_PAT="COUNT"
_LOG=1;/*対数軸にする場合は1*/
run;
実行結果
線形軸
対数軸
eval関数で数値計算ができるので、数値を変換したり統計量の算出をGTL上でも実施できるようです。例えばSAS公式リファレンスには、変数heightの平均値と標準偏差の値から参照線を引く位置を指定する方法が公開されています。
要は変数heightから新規変数を作成しているのと同じです。
referenceline y=eval(mean(height)+2*std(height)) /
まあGTL上で計算しなくてもデータセット作成時に参照線の位置を格納した変数を用意しても同じことができますがね。
テンプレートを使いまわすのであればGTL内での計算は極力少ないほうが良いと思います。