「ローカル」 と 「グローバル」 に同名のマクロ変数が存在する場合、どちらを優先して展開するのか? という問題です。
マクロ変数の展開を「マクロ内」で行っているのか、「マクロの外」で行っているのかによって、以下のとおり展開結果が変わります。
文章でまとめると、
・「マクロ外」では「グローバルマクロ変数」 が展開される。
・「マクロ内」では「ローカルマクロ変数」→「グローバルマクロ変数」 の優先順位で展開される。
たとえば以下では、同じ名前のローカル・グローバルマクロ変数を定義しています。
%macro TEST;
data _null_; call symputx( "MAC1", "1234", "L" ); call symputx( "MAC1", "abcd", "G" ); run; %put _user_; %mend; %TEST; ログ TEST MAC1 1234 GLOBAL MAC1 abcd |
(※ CALL SYMPUTXでローカル・グローバルマクロ変数を分けて作る方法は以下で紹介済み。また次回記事でも紹介予定。)
では以下のように、%PUTを使って、マクロ内とマクロ外でマクロ変数を展開してログに出力してみます。
%macro TEST;
data _null_;
call symputx("MAC1","1234","L");
call symputx("MAC1","abcd","G");
run;
%mend;
%TEST;
ログ
マクロ内 ---> 1234 マクロ外 ---> abcd |
ログを見て頂くと分かる通り、結果はフロー図で示した通りですね。
0 件のコメント:
コメントを投稿