SAS 宏变量引用串联
SAS Macro Variable Quoted Concatenation
我正在调试我正在编写的宏,它会根据用户输入将字符串视为数据集名称的前缀或后缀。然后,引用的结果将被送入下游的另一个流程。
因此,如果用户输入 Type=1 并提供字符串 'data_',生成的宏变量的输出将是 'data_%'.
我已经尝试了以下代码的几个不同的迭代,但不太明白....任何帮助将不胜感激。谢谢
%let Type=1;
%let TableName=data_;
data _null_;
if &Type=1 then
call symput('qTableName',%unquote(%str(%')(cats(&TableName.,"%"))%str(%')));
else if &Type=2 then
call symput('qTableName',%unquote(%str(%')(cats("%",&TableName.))%str(%')));
run;
%put &qTableName;
您似乎在尝试向宏变量添加单引号。
%let TableName=data_;
%let qTableName='data_%';
因此在数据步骤中您可以使用 CATQ()
。
data _null_;
call symputx('qTableName',catq('1a',cats(symget('TableName'),'%')));
run;
或者在简单的宏代码中只使用 %bquote()
允许您添加 '
和 %
而不会阻止宏变量扩展。但是你可能想删除它会导致的宏引用。
%let qTableName=%unquote(%bquote('&TableName%'));
或者如果您只想在 &TYPE=1 时添加 %
,那么也许您可以调用 IFC()
函数。我相信 %sysfunc()
调用会删除宏引用。
%let Type=1;
%let qTableName=%sysfunc(ifc(&type=1,%bquote('&TableName%'),%bquote('&TableName')));
我正在调试我正在编写的宏,它会根据用户输入将字符串视为数据集名称的前缀或后缀。然后,引用的结果将被送入下游的另一个流程。
因此,如果用户输入 Type=1 并提供字符串 'data_',生成的宏变量的输出将是 'data_%'.
我已经尝试了以下代码的几个不同的迭代,但不太明白....任何帮助将不胜感激。谢谢
%let Type=1;
%let TableName=data_;
data _null_;
if &Type=1 then
call symput('qTableName',%unquote(%str(%')(cats(&TableName.,"%"))%str(%')));
else if &Type=2 then
call symput('qTableName',%unquote(%str(%')(cats("%",&TableName.))%str(%')));
run;
%put &qTableName;
您似乎在尝试向宏变量添加单引号。
%let TableName=data_;
%let qTableName='data_%';
因此在数据步骤中您可以使用 CATQ()
。
data _null_;
call symputx('qTableName',catq('1a',cats(symget('TableName'),'%')));
run;
或者在简单的宏代码中只使用 %bquote()
允许您添加 '
和 %
而不会阻止宏变量扩展。但是你可能想删除它会导致的宏引用。
%let qTableName=%unquote(%bquote('&TableName%'));
或者如果您只想在 &TYPE=1 时添加 %
,那么也许您可以调用 IFC()
函数。我相信 %sysfunc()
调用会删除宏引用。
%let Type=1;
%let qTableName=%sysfunc(ifc(&type=1,%bquote('&TableName%'),%bquote('&TableName')));