2014年9月11日木曜日

共有マクロをつくって、プログラミングを効率的にする1





標準的なマクロを作って、みんなで共有する方法を紹介。




①まず共有するマクロ達を入れるフォルダを作ってやります。
今回は適当に「C:\SAS_MACROS」というフォルダを作ってそこに入れたいとします。




②上で作ったフォルダに、マクロプログラムを入れる。
たとえば以下のようなSORTマクロを作って入れます。

C:\SAS_MACROS\mac_SORT.sas
*** SORTマクロ ;
%macro  mac_SORT( DS1, DS2, BYVAR );

   proc sort data=&DS1 out=&DS2;
       by &BYVAR ;
   run;

%mend;

マクロを作る際のルール
・1つのファイルに作れるマクロは1つだけ。
・ファイル名とマクロ名は同一にする。




③SASAUTOSオプションで、共有マクロを使えるようにする。


 OPTIONS SASAUTOS  = ( SASAUTOS "共有マクロのパス"またはファイル参照名 );

(パスまたはファイル参照名は複数指定可。)


今回の例に当てはめて実行してみると、見事SORTマクロを読み込んで実行してくれるはず。

options sasautos = ( SASAUTOS  "C:\SAS_MACROS" );

data DT1;
  do A=10 to 1 by -1;
    output;
  end;
run;

%mac_SORT(DT1, OUT1, A);




ここで注意点
・上で青字にしたファイル参照SASAUTOSを併記するのを忘れずに。

何故かというと、
SAS起動時は「options sasautos = SASAUTOS;」という設定になってて、
このファイル参照SASAUTOSによって、SASがもともと用意してるマクロ(%TRIMや%LEFTなど)が使えるようになっている。
そのため、オプションを再設定する時もこのファイル参照名をいれとかないと、SASが用意してるマクロ達が使えなくなってしまう。



もうひとつ注意点
もし共有マクロにプログラムを追加・修正した場合、その時起動してるSASは一旦再起動するようにしましょう。
(SAS上に、コンパイルした修正前のマクロが残ってるとうまく動いてくれないので。。)




次回 は更なる注意点を解説。



2 件のコメント:

  1. SASAUTOSだと一度指定すると後からマクロを追加しても再度読み直さないと反映されないと聞いたのですが?

    返信削除
  2. (コメント修正しました)

    コメント有難う御座います。

    ご指摘の通り、再読み込みしないと後からマクロを追加したり修正しても反映されない仕様になっています。

    色々調べてみたのですが、どうにも出来ない仕様っぽいので以下を同時に行わないようにする必要があります。
    ①共有マクロを作成・修正する
    ②共有マクロを利用する


    共有マクロを作る方法としてMSTORED,SASMSTOREオプションというのもありますが、これもやはり①②を同時に行わないようにした方がよい感じの仕様でした。

    返信削除