我正在尝试创建一个宏变量,其中包含一个字符串,以便稍后在数据步骤中执行。我的问题是我需要宏变量来包含分号。下面这些都不起作用。如何在此变量声明中添加分号?
%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 ADD:
这就是我希望发生的事情。我希望结果是
First Part; Second Part;但不起作用。
%let commandString=%nrstr('First Part';);
data _null_;
call symput('commandString',cat(&commandString,%nrstr('Second Part';)) ;
run;
%put &commandString; 发布于 2014-12-23 03:00:44
由于您没有提供可复制的代码,所以我对它做了一些修改,以测试其功能。
由于您希望将分号(;)赋值给宏变量,因此基本上是要求SAS对其进行不同的处理,因为在宏编译过程中,您必须使用名为- %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 时使用掩蔽分号。
https://stackoverflow.com/questions/27612755
复制相似问题