在宏函数中分配tranwrd的宏变量输出

时间:2018-11-21 22:24:00

标签: sas

我无法弄清楚这个看似微不足道的问题-期望宏变量被分配为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 :(得分:4)

在通过%sysfunc调用的函数中列出的参数是隐式文本,不应该用引号引起来。在sysfunc调用的函数中放置引号就像在DATA步骤调用中嵌套引号。

尝试

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

DATA Step模拟是

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

您在DATA Step模拟中的原始代码(如下)应显示tranwrd为何未按预期运行。

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

答案 1 :(得分:2)

%sysfunc中使用字符串函数时,不需要引号,除非您希望在输入中找到引号。试试这个:

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