带有返回值的SAS宏,之后带有更多文本

时间:2018-09-11 18:57:41

标签: macros sas return return-value sas-macro

是否可以从SAS宏返回值,并在返回值后继续当前的SAS行?

例如 期望输出到SAS(不带引号):

“设置test.hello_2018_2020_2028;”

我尝试了以下操作:

Tool panel

但是我收到如下错误:

  • 文件test.hello_2018_2020.DATA不存在

  • 文件WORK._2028不存在

因此宏返回的值很好,但是它开始尝试制作另一个set语句,而不是在set语句中添加_&anotherVar

1 个答案:

答案 0 :(得分:1)

是%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;