Макрос SAS с возвращаемым значением с большим количеством текста впоследствии - PullRequest
0 голосов
/ 11 сентября 2018

Можно ли вернуть значение из макроса SAS и продолжить текущую строку 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;

Однако я получаю следующие ошибки:

  • Файл test.hello_2018_2020.DATA не существует

  • Файл WORK._2028 не существует

Таким образом, макрос возвращает значение отлично, однако он начинает пытаться сделать другой оператор set вместо добавления _ & anotherVar к оператору set

1 Ответ

0 голосов
/ 11 сентября 2018

Да% 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;
...