前回の続き。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" ) ; |
0 件のコメント:
コメントを投稿