我无法弄清楚这个看似微不足道的问题-期望宏变量被分配为mpg_city
。
%macro test(col=);
%let id = %sysfunc(tranwrd(&col, 'extra_', ''));
%put &id;
%mend test;
%test(col=extra_mpg_city);
当前输出为extra_mpg_city
。
答案 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);