【问题标题】:SAS %STR function not workSAS %STR 功能不起作用
【发布时间】:2018-03-28 21:10:11
【问题描述】:

我正在尝试使用 %STR 函数来屏蔽字符串中的 %。像这样的代码:

options symbolgen;
%let grp=%str(%C16F%);
%put group is &grp;

它不起作用。实际上,当我单击代码跟随它时,SAS 什么也不做。什么都没有发生。

你知道原因吗?如何解决?

感谢您的帮助! L.

【问题讨论】:

    标签: macros sas


    【解决方案1】:

    %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%'));
    

    【讨论】:

    • 您可能还想补充一点,在尝试您的解决方案时,OP 应确保他们的会话不处于“不稳定”状态。即重新启动他们的 SAS 会话。
    • %nrstr(%C16F%%) 会不会比使用%str() 更好,这样代码就不会尝试调用名为 C16F 的宏?
    • 我确实尝试重新启动 SAS 并使用 %nrstr,但都不起作用。汤姆的答案就是答案。谢谢大家!
    • 使用 %nrstr() 应该可以工作,您仍然需要将% 字符加倍,或者至少是) 之前的那个字符。使用 %nrstr() 而不是 %str() 应该消除调用名为 C16F 的宏的尝试。
    • 是的,如果把 double % 放在最后, %nrstr() 现在可以工作了。再次感谢您!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2021-08-27
    • 2013-01-31
    • 2013-01-17
    • 2020-09-04
    相关资源
    最近更新 更多