Macros SAS宏,返回值后面有更多文本

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;

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

e、 g。 SAS的所需输出(不带引号):

“设置测试。您好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;
但是,我会遇到如下错误:

%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。