SAS Log Utilityの改良ネタを考えたけどボツ案です。
現在、ツールの仕様はMPRINTのオプションを付けないと、マクロ名を拾ってくれません。ひょっとして、デフォルトのオプションのままでもマクロ名を取得できるかもしれないと思いましたがNGです。
下のログは、行番号19の後ろのマクロ名を捕捉します。
8 %macro foo(in_ds);
9 proc sort data=&in_ds out=class;
10 by name;
11 run;
12
13 data class;
14 set work.class;
15 keep name;
16 run;
17 %mend;
18
19 %foo(sashelp.class)
NOTE: データセットSASHELP.CLASSから19オブザベーションを読み込みました。
NOTE: データセットWORK.CLASSは19オブザベーション、5変数です。
NOTE: PROCEDURE SORT処理(合計処理時間):
処理時間 0.04 秒
CPU時間 0.01 秒
NOTE: データセットWORK.CLASSから19オブザベーションを読み込みました。
NOTE: データセットWORK.CLASSは19オブザベーション、1変数です。
NOTE: DATAステートメント処理(合計処理時間):
処理時間 0.26 秒
CPU時間 0.01 秒
以下のログの場合は、マクロで囲まれていないプロシージャです。行番号の後にマクロ名称が無ければ、マクロの外側と判断できるのではないでしょうか?
1 proc sort data=sashelp.class out=class2;
2 by name;
3 run;
NOTE: データセットSASHELP.CLASSから19オブザベーションを読み込みました。
NOTE: データセットWORK.CLASS2は19オブザベーション、5変数です。
NOTE: PROCEDURE SORT処理(合計処理時間):
処理時間 0.04 秒
CPU時間 0.03 秒
行番号 %マクロ名;がマクロの開始、行番号 RUN又はQUIT;でマクロを抜けたことを判定できそうです。しかしながら、マクロが入れ子になっていると外側のマクロ名しか拾えません。継続して検討しますが、無理そうです。