Macros SAS宏,返回值后面有更多文本
是否可以从SAS宏返回值,并在返回值后继续当前SAS行 e、 g。 SAS的所需输出(不带引号): “设置测试。您好2018\2020\2028;” 我尝试了以下方法:Macros SAS宏,返回值后面有更多文本,macros,sas,return,return-value,sas-macro,Macros,Sas,Return,Return Value,Sas Macro,是否可以从SAS宏返回值,并在返回值后继续当前SAS行 e、 g。 SAS的所需输出(不带引号): “设置测试。您好2018\2020\2028;” 我尝试了以下方法: %MACRO returnFunc(passVar); %local testReturn; %let testReturn = %eval(&passVar +1); &testReturn %return; %MEND returnFunc; %MACRO test;
%MACRO returnFunc(passVar);
%local testReturn;
%let testReturn = %eval(&passVar +1);
&testReturn
%return;
%MEND returnFunc;
%MACRO test;
%local var1;
%local varPassed;
%local anotherVar;
%let var1 = 2018;
%let varPassed = 2019;
%let anotherVar = 2028;
set test.hello_&var1._%returnFunc(&varPassed)_&anotherVar;
%MEND test;
但是,我会遇到如下错误:
%MACRO returnFunc(passVar);
%local testReturn;
%let testReturn = %eval(&passVar +1);
&testReturn
%return;
%MEND returnFunc;
%MACRO test;
%local var1;
%local varPassed;
%local anotherVar;
%let var1 = 2018;
%let varPassed = 2019;
%let anotherVar = 2028;
set test.hello_&var1._%returnFunc(&varPassed)_&anotherVar;
%MEND test;
- 文件test.hello\u 2018\u 2020.DATA不存在
- 文件工作。_2028不存在
因此,宏返回值fine,但它开始尝试生成另一个set语句,而不是向set语句添加u&anotherVar并删除该值。在宏调用之后
111 %MACRO returnFunc(passVar);
112 %local testReturn;
113 %let testReturn = %eval(&passVar +1);
114 &testReturn
115 %return;
116 %MEND returnFunc;
117
118 %MACRO test;
119 %local var1;
120 %local varPassed;
121 %local anotherVar;
122
123 %let var1 = 2018;
124 %let varPassed = 2019;
125 %let anotherVar = 2028;
126
127 set %unquote(test.hello_&var1._%returnFunc(&varPassed)_&anotherVar);
128 %MEND test;
129 options mprint=1;
130 data _null_;
131 %test;
MPRINT(TEST): set
MPRINT(TEST): test.hello_2018_2020_2028;
ERROR: Libref TEST is not assigned.
132 run;
我认为您需要在第一个宏的
testReturn
前面加一个&
。另外,请尝试删除%returnFunc(&varPassed)之后的句点。
可以,但PROC FCMP也是一个不错的选择。我认为需要%UNQUOTE。