2017年8月28日月曜日

そのマクロ変数、ローカル?グローバル?⑤マクロ変数の作成場所を明示的に指定する




マクロ変数を作成する場所(ローカル or グローバル)を明示的に指定することが出来ます。




「%LOCAL」と「%GLOBAL」を使う


・「%LOCALステートメント」で「ローカルマクロ変数」を作成できます。
・「%GLOBALステートメント」で「グローバルマクロ変数」を作成できます。


構文

  %LOCAL    マクロ変数1  マクロ変数2 ・・・;
  %GLOBAL  マクロ変数1  マクロ変数2 ・・・;




使用例の前にまずは、今回つかうマクロ変数をリセット(削除)しときます。
%symdel  MAC1 MAC2 MAC3 MAC4 MAC5  /  nowarn;



%macro TEST;

    %local    MAC1  MAC2 ;
    %global  MAC3 ;

    %put _user_;

%mend;
%TEST;

ログ
TEST MAC1
TEST MAC2
GLOBAL MAC3





「CALL SYMPUTX」を使う


CALL SYMPUTXの第3引数で、ローカル・グローバルどちらに作成するか指定できます。


構文

  CALL SYMPUTX( "マクロ変数名", "格納する値" , "G") ;
  CALL SYMPUTX( "マクロ変数名", "格納する値" , "L") ;


"G": グローバルマクロ変数にする
"L": ローカルマクロ変数にする(マクロ外で実行するとグローバルマクロ変数になる)


%macro TEST;

    data _null_;
        call symputx("MAC4","abcd","L");
        call symputx("MAC5","1234","G");
    run;

    %put _user_;

%mend;
%TEST;

ログ
TEST MAC4 abcd
GLOBAL MAC5 1234


ローカルマクロ変数はマクロ終了とともに消えるので、無駄なマクロ変数が残りません。
なのでローカルマクロ変数を明示的に定義する方が内部的にはキレイなプログラムといえると思います。



記事一覧

1. 基本概念
2. %LET編
3. CALL SYMPUT編
4. マクロ変数の展開
5. マクロ変数の作成場所を明示的に指定する

0 件のコメント:

コメントを投稿