【问题标题】:SAS: leaving ampersand in a macro variableSAS:将&符号留在宏变量中
【发布时间】:2018-03-08 06:55:34
【问题描述】:

这应该很容易,但我想不通:在某些情况下,我需要从表格的内容创建宏变量,并且它们有时包含与号 (&) 作为文本的一部分。当我调用宏变量时,如何让 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 写入日志?非常感谢!

【问题讨论】:

  • 尝试在此类变量上使用引用函数(如 nrstr 或 superq)或将变量的值放在单引号中
  • 太好了。谢谢!

标签: sas sas-macro ampersand


【解决方案1】:

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

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

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

%put testvar=%superq(testvar);

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

【讨论】:

  • 太完美了!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多