SAS分号在MAcro变量中

时间:2014-12-23 01:03:58

标签: sas

我正在尝试创建一个宏变量,该变量包含一个字符串,以便稍后在数据步骤中执行。我遇到的问题是我需要宏变量来包含分号。以下不起作用。如何在此变量声明中添加半冒号?

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

1 个答案:

答案 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;

编辑(已编辑问题)

  1. 单引号的位置在您的代码中是错误的,单引号也应包含分号,因为您也希望包含它们。
  2. 在电话会议部分,您错过了一个括号。
  3. 修改后的代码

     %let commandString=%nrstr('First Part;');
        data _null_;
        call symput('commandString',cat(&commandString,%nrstr('Second Part;')));
        run;
        %put "&commandString";
        %put %nrquote(&commandString); 
    

    由于命令字符串解析为包含分号(;)的值,因此为了使用%put函数打印它的值,您也必须屏蔽它,否则会引发错误。在这里,您可以使用“”将其视为字符串,或者您必须在解析时使用 %nrquote来屏蔽分号