назначить выход макропеременной функции tranwrd в функции макроса - PullRequest
0 голосов
/ 22 ноября 2018

Я не могу понять эту, казалось бы, тривиальную проблему - ожидаю, что будет назначена макропеременная mpg_city.

%macro test(col=);
    %let id = %sysfunc(tranwrd(&col, 'extra_', ''));    
    %put &id;
%mend test;
%test(col=extra_mpg_city);

Токовый выход extra_mpg_city.

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Аргументы, перечисленные в функции, вызываемой через %sysfunc, неявно являются текстовыми и не должны заключаться в кавычки.Размещение кавычек в вызываемой функции sysfunc похоже на вложение кавычек при вызове шага DATA.

Попробуйте

%let id = %sysfunc(tranwrd(&col, extra_, %str()));

Аналог шага DATA:

id = tranwrd("&col", "extra_", "");

ВашИсходный код в DATA Step аналог (ниже) должен показать, почему tranwrd не работает так, как вы ожидали.

id = tranwrd("&col", "'extra_'", "''");
0 голосов
/ 22 ноября 2018

Вам не нужны кавычки при использовании строковых функций с %sysfunc, если только вы не ожидаете найти их во входных данных.Попробуйте это:

%macro test(col=);
    %let id = %sysfunc(tranwrd(&col, extra_, ));    
    %put &id;
%mend test;
%test(col=extra_mpg_city);
...