ラベル オプション: SASAUTOS の投稿を表示しています。 すべての投稿を表示
ラベル オプション: SASAUTOS の投稿を表示しています。 すべての投稿を表示

2014年9月15日月曜日

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




前回の続き。SASのバージョンによって挙動が変わるかもしれないけど、
SASAUTOSオプションを使った時に、以下のようなエラーが出て困ったなという事はないでしょうか?

ERROR: ファイル参照名 TEST に関連付けたファイルの中に、現在使用されているファイルがあります。
ERROR: FILENAME ステートメントのエラーです。



まず、このエラーを再現してみましょう。


①前回と同様に共有マクロを作る。

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

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

%mend;


②上で作った共有マクロを使えるようにするのですが、
前回と違って、以下のようにファイル参照名をSASAUTOSオプションに設定します。

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

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

%mac_SORT(DT1, OUT1, A);

このプログラムを2回実行してみましょう。
1回目は普通に動くけど、2回目はエラーが出てしまうはずです!



原因


SASAUTOSオプションで使われたファイル参照名は、SASAUTOSオプションに守られるようになります。
よって、そのファイル参照名を消そうとしたり、再定義しようとすると、SASAUTOSオプションに守られてるので、突っぱねられてエラーが出てしまうのです。


今回の例では、1回目の実行で、ファイル参照TESTがSASAUTOSオプションに守られることになる。
よって2回目実行したとき、

filename TEST "C:\SAS_MACROS";

の部分で「ファイル参照TESTを再定義しようとしてるな!」と目をつけられてエラーになるというわけです。

このエラーを手っ取り早く回避するには、ファイル参照名ではなく直接パスを入れてやります。

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



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つだけ
・ファイル名とマクロ名は同一にする
・SAS Studioなど、一部環境ではファイル名を小文字にしないと動きませんでした



③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上に、コンパイルした修正前のマクロが残ってるとうまく動いてくれないので。。)




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