我正在调试我正在编写的宏,它将根据用户输入将字符串视为数据集名称的前缀或后缀。然后,引用的结果将被输入下游的另一个过程。
因此,如果用户说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;
答案 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')));