首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MAcro变量中的SAS分号

MAcro变量中的SAS分号
EN

Stack Overflow用户
提问于 2014-12-23 01:03:58
回答 1查看 4.3K关注 0票数 2

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

代码语言:javascript
复制
    %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:

这就是我希望发生的事情。我希望结果是

代码语言:javascript
复制
First Part; Second Part;

但不起作用。

代码语言:javascript
复制
%let commandString=%nrstr('First Part';);

data _null_;
call symput('commandString',cat(&commandString,%nrstr('Second Part';)) ;
run;

%put &commandString; 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-23 03:00:44

由于您没有提供可复制的代码,所以我对它做了一些修改,以测试其功能。

由于您希望将分号(;)赋值给宏变量,因此基本上是要求SAS对其进行不同的处理,因为在宏编译过程中,您必须使用名为- %nrstr掩蔽函数- -掩蔽特殊字符(包括&和% )和助记符运算符。

http://support.sas.com/documentation/cdl/en/mcrolref/61885/HTML/default/viewer.htm#a000208352.htm

代码语言:javascript
复制
%let commandString=%nrstr('';);
data _null_;
%put &commandString ;
run;

编辑(问题已被编辑)

  1. 单引号的位置在您的代码中是错误的,单引号应该包括分号,因为您也想包含它们。
  2. 在调用符号部分,您缺少了一个括号。

修改代码

代码语言:javascript
复制
 %let commandString=%nrstr('First Part;');
    data _null_;
    call symput('commandString',cat(&commandString,%nrstr('Second Part;')));
    run;
    %put "&commandString";
    %put %nrquote(&commandString); 

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

  • % n引用-在宏执行时用解析值掩码特殊字符(包括&和%)和助记符运算符。
  • http://support.sas.com/documentation/cdl/en/mcrolref/61885/HTML/default/viewer.htm#a000208412.htm
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27612755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档