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')));