我正在尝试创建一个宏变量,该变量包含一个字符串,以便稍后在数据步骤中执行。我遇到的问题是我需要宏变量来包含分号。以下不起作用。如何在此变量声明中添加半冒号?
%let commandString='';
data _null_;
set DATA;
if decile =1 then call symput('commandString', cat(&commandString, " if p_adj >", min, " then decile_ =1" , %str(;) ) ) ;
run;
%put &commandString
添加
这就是我想要发生的事情。我希望结果是
First Part; Second Part;
但它不起作用。
%let commandString=%nrstr('First Part';);
data _null_;
call symput('commandString',cat(&commandString,%nrstr('Second Part';)) ;
run;
%put &commandString;
答案 0 :(得分:3)
由于您没有提供可重现的代码,因此我对其进行了一些修改以测试其功能。
由于你想为宏变量分配分号(;),你基本上要求SAS以不同的方式对待它,你必须使用一个名为的{strong>掩蔽函数 - %nrstr
哪个 - 掩盖特殊字符,包括&和%,以及宏编译期间常量文本中的助记符运算符
http://support.sas.com/documentation/cdl/en/mcrolref/61885/HTML/default/viewer.htm#a000208352.htm
%let commandString=%nrstr('';);
data _null_;
%put &commandString ;
run;
编辑(已编辑问题)
修改后的代码
%let commandString=%nrstr('First Part;');
data _null_;
call symput('commandString',cat(&commandString,%nrstr('Second Part;')));
run;
%put "&commandString";
%put %nrquote(&commandString);
由于命令字符串解析为包含分号(;)的值,因此为了使用%put函数打印它的值,您也必须屏蔽它,否则会引发错误。在这里,您可以使用“”将其视为字符串,或者您必须在解析时使用 %nrquote
来屏蔽分号