私のコードでは、多くのレベルで多くのマクロが使用されています。マクロ変数の大部分は同じ(日付)ですが、異なる日付のマクロを実行したい場合があります。変数が衝突します。sasマクロですべての変数をローカルに作成する方法は?
マクロに表示されるすべての変数が、%ローカルを何度も使用せずにローカルでなければならないことをどのように記述できますか?ネストされたマクロの場合、より深いレベルの変数の値は、上位レベルの変数を感染させます。
私のコードでは、多くのレベルで多くのマクロが使用されています。マクロ変数の大部分は同じ(日付)ですが、異なる日付のマクロを実行したい場合があります。変数が衝突します。sasマクロですべての変数をローカルに作成する方法は?
マクロに表示されるすべての変数が、%ローカルを何度も使用せずにローカルでなければならないことをどのように記述できますか?ネストされたマクロの場合、より深いレベルの変数の値は、上位レベルの変数を感染させます。
毎回%ローカルで明示的にリストする必要があります。残念ながら、ショートカットはありません。
ネストされたマクロのトラブルシューティングで問題が発生した場合は、自分の標準を変更して、決してマクロの(入力)パラメータの値を変更しないでください。この単純な概念は、デバッグをはるかに簡単にします。
マクロに%includeステートメントがある場合、 'option source2'を追加すると、これらのソースコードもログに表示されます。
乾杯 ロブ
別のオプションは、マクロ文のライン上のマクロパラメータとして変数を定義することです。以下は、DATEという名前のグローバルマクロ変数を作成し、DATEという名前のマクロを定義する単純なプログラムです。さらに、マクロは異なる日付値(1)で自身を呼び出します。
options nosource nonotes;
%let date = '01jan2011'd;
%put Global DATE = &date;
%******************************************************************************;
%macro test_macro_level(date=,nest_level=);
%put INSIDE MACRO - Nest Level=&nest_level : DATE=&date;
%if %eval(&nest_level = 1) %then %do;
%test_macro_level(date='01mar2011'd,nest_level=2);
%put INSIDE MACRO, AFTER NESTING - Nest Level=&nest_level : DATE=&date;
%end;
%mend test_macro_level;
%******************************************************************************;
%test_macro_level(date='01feb2011'd,nest_level=1);
%put Return to Global: Date=&date;
ログファイルは、読み取ります
Global DATE = '01jan2011'd
INSIDE MACRO - Nest Level=1 : DATE='01feb2011'd
INSIDE MACRO - Nest Level=2 : DATE='01mar2011'd
INSIDE MACRO, AFTER NESTING - Nest Level=1 : DATE='01feb2011'd
Return to Global: Date='01jan2011'd
は、(1)は、反復マクロは参考用のみで、決して独自のコードを汚染しなければならないことに注意してください。
サンプルコードを記入してください。マクロがどのように作成されているかを表示すると、より多くのアドバイスを与えることができます。 –