【发布时间】:2018-03-28 21:10:11
【问题描述】:
我正在尝试使用 %STR 函数来屏蔽字符串中的 %。像这样的代码:
options symbolgen;
%let grp=%str(%C16F%);
%put group is &grp;
它不起作用。实际上,当我单击代码跟随它时,SAS 什么也不做。什么都没有发生。
你知道原因吗?如何解决?
感谢您的帮助! L.
【问题讨论】:
我正在尝试使用 %STR 函数来屏蔽字符串中的 %。像这样的代码:
options symbolgen;
%let grp=%str(%C16F%);
%put group is &grp;
它不起作用。实际上,当我单击代码跟随它时,SAS 什么也不做。什么都没有发生。
你知道原因吗?如何解决?
感谢您的帮助! L.
【问题讨论】:
%STR() 需要您在字符串中的第二个% 前面添加额外的%,否则它会认为您正在尝试使用% 来转义右括号。这就是为什么它似乎没有运行。 %LET 语句仍在等待查看%str() 函数调用的结束和终端;。
%let grp=%str(%C16F%%);
%put group is &grp;
我发现使用数据步骤和%superq() 来确保引用值更容易。
data _null_;
call symputx('grp','%C16F%');
run;
%let grp=%superq(grp);
或者使用%qsysfunc()调用dequote()去掉物理单引号,添加宏引用。
%let grp=%qsysfunc(dequote('%C16F%'));
【讨论】:
%nrstr(%C16F%%) 会不会比使用%str() 更好,这样代码就不会尝试调用名为 C16F 的宏?
% 字符加倍,或者至少是) 之前的那个字符。使用 %nrstr() 而不是 %str() 应该消除调用名为 C16F 的宏的尝试。