SYMPUT関数の使用
[OS]ALL
[リリース] 5.18, 6.07, 6.08, 6.09, 6.10
[キーワード] base, datastep, %put, run, statement, macro, variable, call, symput, doublequote
[質問]以下のDATAステップでSYMPUTルーチンで作成したマクロ変数が、思ったように参照できません。なぜでしょうか。 data _null_; set sasuser.class; retain max 0; if max<weight then do; call symput('NUM',trim(put(height,best.))); %put &NUM; end; run; [回答]DATAステップの実行は、次の3つのステップに分かれます。
ステップ1からステップ2に移るタイミングは、RUNまたは別のPROCおよびDATAステートメントを読み込んだときです。
一方、%PUTステートメントは、そのステートメントを読み込んだ時点で実行されます。
質問のプログラム例で%PUTステートメントが実行されるのは、RUNステートメントの読み込み前、すなわち上記のステップ1です。 data _null_; set sasuser.class; retain max 0; if max<weight then do; call symput('NUM',trim(put(height,best.))); end; run; %put &NUM;
つまり、RUNステートメントと%PUTステートメントを入れ変えるだけです。
|