我從來不知道你不能在%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);
我想你的建議什麼工作?你試過了嗎?但是,你爲什麼要這樣做?我無法看到應用程序。 – ESmith5988
您好ESmith,當然我測試了我的建議,但都無法正常工作。我有一個問題,它使用非常深的嵌套程序片段。爲了讓它們更具可讀性和可用性,我必須使用可以設置可編程宏而非單手設置宏名的宏來生成宏。希望這可以讓問題更清楚:) –