%MACRO ステートメントで変数を使用できないとは知りませんでしたが、そのようです。SAS ドキュメント ( http://support.sas.com/documentation/cdl/en/mcrolref/61885/HTML/default/viewer.htm#macro-stmt.htm ) に記載されているように、「テキスト式を使用して%MACRO ステートメントでマクロ名を生成します。"
次に考えたのは、%MACRO ステートメントを変数として作成できるかもしれないということでしたが、変数の作成時に %MACRO をマスクする方法が見つかりませんでした。
私は最終的に回避策を見つけましたが、これを行うための最良の方法ではない可能性があります (そして、あなたがやろうとしていることにうまくいかないかもしれません)。データ ステップでマクロ ステートメントをコンパイルできることがわかりました。残念ながら、マクロ コード全体 (%MACRO から %MEND ステートメントまで) が変数に保存されている場合にのみ、変数からマクロを実行できました。以下のコードを参照してください。
%MACRO test(name);
data test;
*COMPILE MACRO STATEMENT;
pct=%nrstr('%');
name="new_&name";
beginning=pct||'MACRO '||strip(name)||'();';
*CODE TO BE INSIDE MACRO;
/*Note: SAS will encounter errors if you try to assign text containing macro
functions (e.g., %PUT, %IF, etc.) to a variable. To get around this, you must
put hide the % in the following syntax, %nrstr('%'), and concatenate/join the
syntax with the rest of the string */
code=pct||'PUT HELLO!;';
*COMPILE MEND STATEMENT;
end=pct||'MEND;';
call symput('MacroStatement',beginning||code||end); *Output var containing macro;
call symput('Execute',pct||strip(name)||';'); *Output var containing statement to run macro;
output;
run;
&MacroStatement
&Execute
%MEND;
%test(name1);