ステートメント中にDATAステップの変数の値を指定する

[OS]ALL
[リリース] 5.18, 6.07, 6.08, 6.09, 6.10
[キーワード] base, datastep, proc, statement, title, macro, variable, call, symput, _null_

[質問]

ステートメントのオプション値やTITLEステートメントのタイトルなどに、DATAステップの変数値を指定したいのですが、どのようにすればよいのでしょうか。

[回答]

ステートメントのオプション値やTITLEステートメントのタイトルなどは、通常、定数を指定しなければなりません。しかし、CALL SYMPUTルーチンとマクロ変数を使えば、DATAステップの変数値をプログラムテキスト中に取り込めます。

GPLOTプロシジャで作成する散布図の縦軸変数について、その平均値を参照線として表す方法を例にして説明します。

  1. 縦軸変数HEIGHTの平均値を求めます。例では、MEANSプロシジャを使って平均値を求めCLASSMという出力SASデータセットを作成しています。
  2. DATAステップを使って、平均値をマクロ変数AVERAGEに与えます。CALL SYMPUTルーチンは、DATAステップ変数の値をマクロ変数に格納するためのルーチンです。マクロ変数AVERAGEは、このDATAステップ以降のステートメント中で自由に参照することができます。
  3. GPLOTプロシジャで散布図を作成します。PLOTステートメントのVREF=オプション値として、直前に作成したマクロ変数AVERAGEを参照します。
           proc means data=sasuser.class noprint;
              var height;
              output out=classm mean=avg;
           run;
    
           data _null_;
              set classm;
              call symput('AVERAGE',put(avg,best.));
           run;
    
           proc gplot data=sasuser.class;
              plot height * name / vref=&AVERAGE;
           run; quit;
           

この例の平均値AVGが62.33だとすると、SASはPLOTステートメントを次のように 解釈して実行します。

  plot height * name / vref=62.33;