Sas 在宏函数中指定tranwrd的宏变量输出

Sas 在宏函数中指定tranwrd的宏变量输出,sas,Sas,我无法解决这个看似琐碎的问题-希望分配宏变量mpg\u city %macro test(col=); %let id = %sysfunc(tranwrd(&col, 'extra_', '')); %put &id; %mend test; %test(col=extra_mpg_city); 当前输出是额外的城市,除非您希望在输入中找到它们,否则在使用字符串函数时不需要引号。试试这个: %macro test(col=); %let id

我无法解决这个看似琐碎的问题-希望分配宏变量
mpg\u city

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

当前输出是额外的城市,除非您希望在输入中找到它们,否则在使用字符串函数时不需要引号。试试这个:

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

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

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

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

试一试

数据步进模拟为

id = tranwrd("&col", "extra_", "");
数据步模拟(如下)中的原始代码应显示
tranwrd
未按预期运行的原因

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

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

试一试

数据步进模拟为

id = tranwrd("&col", "extra_", "");
数据步模拟(如下)中的原始代码应显示
tranwrd
未按预期运行的原因

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

此外,如果您只是创建宏变量,则应查看
数据\u空值
步骤和
调用SYMPUTX()
。在我看来,这通常比摆弄宏函数容易得多。通常,您不希望太多的宏使代码混乱,这会使调试更加困难。最佳做法是确保宏变量在宏中本地化(除非您的编码设计使用全局变量或在框架中)--
%local id此外,如果您只是在创建宏变量,则应该查看
数据\u空值
步骤和
调用SYMPUTX()
。在我看来,这通常比摆弄宏函数容易得多。通常,您不希望太多的宏使代码混乱,这会使调试更加困难。最佳做法是确保宏变量在宏中本地化(除非您的编码设计使用全局变量或在框架中)--
%local id