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

Eri*_*ric 3 sas ampersand sas-macro

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

data _null_;
test="Amos&Andy";
call symputx("testvar",test);
run;
%put testvar=&testvar;
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

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

Que*_*tin 6

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

data _null_;
test='Amos&Andy';
call symputx("testvar",test);
run;
Run Code Online (Sandbox Code Playgroud)

当你想要解析&testvar时,你需要一种方法告诉宏处理器不要解析解析&testvar所揭示的任何宏触发器.这是宏报价的目的:

%put testvar=%superq(testvar);
Run Code Online (Sandbox Code Playgroud)

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