SAS:将&符号留在宏变量中

时间:2017-09-26 22:37:40

标签: sas sas-macro ampersand

这应该是一个简单的,但我无法弄清楚:有些情况下我需要从表的内容创建一个宏变量,它们有时包含&符号(&)作为文本的一部分。当我调用宏变量时,如何让SAS忽略&符号?例如,这段代码......

data _null_;
test="Amos&Andy";
call symputx("testvar",test);
run;
%put testvar=&testvar;

...将此内容写入日志:

28   data _null_;
29   test="Amos&Andy";
WARNING: Apparent symbolic reference ANDY not resolved.
30   call symputx("testvar",test);
31   run;

NOTE: DATA statement used (Total process time):
  real time           0.00 seconds
  cpu time            0.00 seconds


WARNING: Apparent symbolic reference ANDY not resolved.
32   %put testvar=&testvar;
testvar=Amos&Andy

如何让SAS忽略&符号而不将WARNING写入日志?非常感谢!

1 个答案:

答案 0 :(得分:6)

第一个警告很容易避免。宏变量引用不解析单引号内部,因此您可以使用:

data _null_;
test='Amos&Andy';
call symputx("testvar",test);
run;

当您想要解析& testvar时,您需要一种方法告诉宏处理器不要解析通过解析& testvar显示的任何宏触发器。这是宏引用的目的:

%put testvar=%superq(testvar);

%SUPERQ告诉宏处理器解析宏变量Testvar并引用(即屏蔽)解析Testvar所揭示的任何宏触发器。这可以防止宏处理器查找名为Andy的宏变量。