具有 Return 值的 SAS 宏,之后有更多文本
SAS Macro with Return value with more text afterwards
是否可以从 SAS 宏中 return 一个值,并在 return 该值后继续当前的 SAS 行?
例如
SAS 的期望输出(不带引号):
"set test.hello_2018_2020_2028;"
我试过以下方法:
%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;
但是我收到如下错误:
文件测试。hello_2018_2020.DATA不存在
文件 WORK._2028 不存在
因此宏 return 的值很好,但是它开始尝试创建另一个 set 语句而不是将 _&anotherVar 添加到 set 语句
是 %UNQUOTE 并删除 .宏调用后。
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;
是否可以从 SAS 宏中 return 一个值,并在 return 该值后继续当前的 SAS 行?
例如 SAS 的期望输出(不带引号):
"set test.hello_2018_2020_2028;"
我试过以下方法:
%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;
但是我收到如下错误:
文件测试。hello_2018_2020.DATA不存在
文件 WORK._2028 不存在
因此宏 return 的值很好,但是它开始尝试创建另一个 set 语句而不是将 _&anotherVar 添加到 set 语句
是 %UNQUOTE 并删除 .宏调用后。
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;