SASマクロ コーディング作法

【SAS】マクロ展開時の%PUTステートメントによるマクロ名の出力について

私のマクロをご覧になるとお気づきになるかと思いますが、マクロの冒頭において、%PUTステートメントでマクロ名や引数を出力するようにしています。

例えば、マクロmk_macvarの冒頭部分だと以下のような感じです。

%macro mk_macvar(indata=, var=, num=nword);
%put --------------------------------------------------;
%put mk_macvar;
%put データセットの指定した変数の変数値をマクロ変数化する;
%put &=indata;	/*データセット名を指定(データセットオプションの指定可)*/
%put &=var;	    /*マクロ変数化対象の変数名を指定する(スペース区切りで複数指定可)*/
%put &=num;	    /*読込データセットのレコード数を格納するマクロ変数名を指定する(デフォルト:nword)*/
%put --------------------------------------------------;

    ///// 途中省略 /////

%mend mk_macvar;

%PUTステートメントを記述する理由は以下になります。

  • ・どのマクロが展開されたかログに出力される
  • ・ゆえに、エラーがどのマクロで発生したのかすぐに確認できる
  • ・ゆえに、デバッグ効率が格段に上がる
  • ・ゆえに、作業コストを大幅に下げられる
  • 他人が作成した大規模なプログラムを修正した経験がある方なら共感して頂けると思いますが、エラーが発生したときに、その発生個所を探すのに膨大な時間がかかり、ストレスマッハになったことはないでしょうか?笑

    それを緩和するのが、この%PUTステートメントになります。

    例えば、以下のようにmk_macvarを展開すると、

    %mk_macvar(indata=list, var=first_name last_name sex age, num=nword);
    

    以下のログが出力されます。
    put_log
    (ちなみにこのログは、SAS Studioで展開したときのログです。)

    上図の赤枠部分がログに出力されるだけで、作業効率が格段に向上するかと思います。

    引数部分まで%PUTステートメントを記述する必要はなく、マクロ名だけでも十分だと思います。

    大規模なプログラムの運用で凄まじい効果を発揮するはずです。