SAS宏变量引用连接

时间:2015-12-09 18:21:32

标签: macros sas sas-macro

我正在调试我正在编写的宏,它将根据用户输入将字符串视为数据集名称的前缀或后缀。然后,引用的结果将被输入下游的另一个过程。

因此,如果用户说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;

1 个答案:

答案 0 :(得分:3)

看起来您正在尝试将单引号添加到宏变量中。

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