PROC TEMPLATE; DEFINE STATGRAPH テンプレート名; DYNAMIC ダイナミック変数1 ダイナミック変数2 ・・・ ; ~ ここにダイナミック変数を使ってグラフを作成する文を書く ~ END; RUN; PROC SGRENDER DATA=プロットするデータセット TEMPLATE=テンプレート名; DYNAMIC ダイナミック変数1=設定値 ダイナミック変数2=設定値 ・・・; RUN; |
構文だけだとよく分かんないので例を見てみましょう。
(ちなみに「ダイナミック変数の設定値に対して、クォーテーションをつけるか否か」が間違えやすいです。その点も記事の最後に解説してるのでご参照下さい)
proc template ; define statgraph MYGRAPH; dynamic _XVAR _YVAR; |
① まずはTEMPLATEプロシジャにて「dynamic _XVAR _YVAR;」で 「_XVAR」「_YVAR」 というダイナミック変数を定義。
begingraph ; layout overlay ; scatterplot x=_XVAR y=_YVAR; endlayout; endgraph; end; run; |
proc sgrender data=SASHELP.CLASS template=MYGRAPH; dynamic _XVAR="WEIGHT" _YVAR="HEIGHT"; run; |
③ SGRENDERでグラフ作成を実行する際に、「dynamic _XVAR="WEIGHT" _YVAR="HEIGHT";」でTEMPLATEプロシジャ内の、
利点
以下のように、ダイナミック変数の設定値を変えて再度実行する事が出来るので、汎用性が高いTEMPLATEが作れます。
- ダイナミック変数「_XVAR」を「WEIGHT」に、
- ダイナミック変数「_YVAR」を「HEIGHT」に設定して実行します。
以下のように、ダイナミック変数の設定値を変えて再度実行する事が出来るので、汎用性が高いTEMPLATEが作れます。
proc sgrender data=SASHELP.CLASS template=MYGRAPH; dynamic _XVAR="AGE" _YVAR="HEIGHT"; run; |
ポイント1
「ダイナミック変数」と「PLOTに使用するデータセットの変数」の名前が被らないようにご注意下さい。挙動がおかしくなります。
ポイント2
「ダイナミック変数の設定値に対して、クォーテーションをつけるか否か」のルールとして、
- 変数名や文字に対してはクォーテーションをつける
- 数値の場合、
- 「10」のように数値1個だけの設定値の場合はクォーテーションをつけない
- 「10 20 30」のような数値を列挙するような設定値の場合はクォーテーションをつける
以下、上のルールを適用した例
* グラフテンプレート作成 ; proc template ; define statgraph MYGRAPH; dynamic _ETITLE _XMIN _XMAX _XLIST _XVAR _YVAR; begingraph ; entrytitle _ETITLE; layout overlay / xaxisopts=(linearopts=( viewmin=_XMIN viewmax=_XMAX tickvaluelist=_XLIST)); scatterplot x=_XVAR y=_YVAR; endlayout; endgraph; end; run; * グラフ作成実行 ; proc sgrender data=SASHELP.CLASS template=MYGRAPH; dynamic _ETITLE = "散布図" _XMIN = 0 _XMAX = 200 _XLIST = "0 100 200" _XVAR = "WEIGHT" _YVAR = "HEIGHT"; run; |
特に「TICKVALUELIST」に注目!
PROC TEMPLATEでは通常、以下のようにカッコで囲って数値を列挙しますが、
tickvaluelist=(0 100 200) |
ダイナミック変数を使う場合、カッコは不要
tickvaluelist=_XLIST |
また、PROC SGRENDERでダイナミック変数に設定する値はクォーテーションで囲ってあげないと認識してくれません。
_XLIST="0 100 200" |
このように「カッコをつけるか否か」や「クォーテーションをつけるか否か」など、細かいルールでミスってうまく動かないことが多いので、リファレンスを参照しつつ、実行後にログや出力結果を確認するようにしましょう。
引数の設定
0 件のコメント:
コメントを投稿