簡體   English   中英

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

[英]SAS Macro with Return value with more text afterwards

是否可以從SAS宏返回值,並在返回值后繼續當前的SAS行?

例如,期望輸出到SAS(不帶引號):

“設置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;

但是我得到如下錯誤:

  • 文件test.hello_2018_2020.DATA不存在

  • 文件WORK._2028不存在

因此該宏返回的值很好,但是它開始嘗試制作另一個set語句,而不是在set語句中添加_&anotherVar

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM