マクロプログラムにおけるネスト情報の出力

[OS] ALL
[リリース] SAS 9.1以降
[キーワード] Base, macro, debug option, nest, MPRINTNEST, MLOGICNEST

[質問]

マクロプログラム中で他のマクロプログラムを呼び出す際、MPRINTシステムオプションやMLOGICシステムオプションを設定しても、実行中のマクロプログラムがどのマクロプログラムから呼び出されているのか判断できません。
何か良い方法はありませんか。

[回答]

SAS9で追加されたMPRINTNESTおよびMLOGICNESTシステムオプションにより、実行されたマクロプログラムがどのマクロプログラムから呼び出されたのか(いわゆるネストの情報)が、MPRITおよびMLOGICシステムオプションの情報として実行ログに表示されます。

以下は、同じマクロプログラムをSAS8とSAS9でそれぞれ実行した際のログです。MPRINTおよびMLOGICシステムオプションが出力する情報の違いをご確認ください。

■ SAS8での実行ログ

1    %MACRO a;
2      DATA _null_;
3        PUT 'hello A';
4      RUN;
5    %MEND;
6    %MACRO b;
7      %a
8      DATA _null_;
9        PUT 'hello B';
10     RUN;
11   %MEND;
12
13   OPTIONS MPRINT MLOGIC;
14
15   %b
MLOGIC(B):  実行を開始します。
MLOGIC(A):  実行を開始します。
MPRINT(A):   DATA _null_;
MPRINT(A):   PUT 'hello A';
MPRINT(A):   RUN;

hello A
NOTE: DATA ステートメント 処理 :
       処理時間            0.10 秒
       CPU 時間            0.00 秒


MLOGIC(A):  実行を終了します。
MPRINT(B):   DATA _null_;
MPRINT(B):   PUT 'hello B';
MPRINT(B):   RUN;
hello B
NOTE: DATA ステートメント 処理 :
       処理時間            0.00 秒
       CPU 時間            0.00 秒


MLOGIC(B):  実行を終了します。

■ SAS9での実行ログ

1    %MACRO a;
2      DATA _null_;
3        PUT 'hello A';
4      RUN;
5    %MEND;
6
7    %MACRO b;
8      %a
9
10     DATA _null_;
11       PUT 'hello B';
12     RUN;
13   %MEND;
14
15   OPTIONS MPRINT MPRINTNEST MLOGIC MLOGICNEST;
16
17   %b
MLOGIC(B): 実行を開始します。
MLOGIC(B.A): 実行を開始します。
MPRINT(B.A):   DATA _null_;
MPRINT(B.A):   PUT 'hello A';
MPRINT(B.A):   RUN;

hello A
NOTE: DATA ステートメント 処理 (合計処理時間):
       処理時間            0.02 秒
       CPU 時間            0.03 秒


MLOGIC(B.A): 実行を終了します。
MPRINT(B):   DATA _null_;
MPRINT(B):   PUT 'hello B';
MPRINT(B):   RUN;
hello B
NOTE: DATA ステートメント 処理 (合計処理時間):
       処理時間            0.00 秒
       CPU 時間            0.00 秒


MLOGIC(B): 実行を終了します。