SAS函数:官方文档搬运---%str和%nrstr

系统文档

  • 定义
    系统文档截图

Mask special characters and mnemonic operators inconstant text at macro compilation.
宏编译屏蔽特殊字符助记符


  • 句法
    系统文档截图

  • 详情
    系统文档截图

在编译宏或宏语言语句期间, %STR%NRSTR函数屏蔽字符串。所能屏蔽的特殊字符如上截图所示。


系统文档截图

' '' ( )成对出现或者不成对匹配、或者被前面的%标记时,%STR%NRSTR函数也能够予以屏蔽。


系统文档截图

除此之外,%NRSTR也可以屏蔽& %


系统文档截图

%STR对于包含如下特殊字符的字符串最有用:

  1. 应被视为文本而不是宏程序语句的一部分的分号
  2. 有意义的空格
  3. 不匹配的引号或圆括号

在嵌套的%STR%QUOTE中放置相同的参数是冗余的。

%put %quote(%100);
%put %quote(%str(%100));
%put %str(%100);

日志结果

系统文档截图

不要使用%str包含宏函数或者有参数值列表的宏调用。因为%STR会屏蔽没有配对的括号,因此,宏处理器就无法识别函数的参数或者宏调用的参数值。


系统文档截图

宏引用嵌套的最大水平是10层。


  • 比较
    官方文档截图

在所有宏引用函数中,只有%NRSTR和%STR在编译期间生效。其他宏引用函数在宏执行时生效。

The little SAS Book截图

%STR和%NRSTR屏蔽与%QUOTE和%NRQUOTE相同的项。然而,%QUOTE和%NRQUOTE在宏执行期间发挥作用。
如果宏表达式解析产生项时需要被屏蔽,请使用%BQUOTE或%NRBQUOTE函数而不是%STR或%NRSTR函数。

宏语句运行过程示意图
    • 比对
函数 执行阶段
%BQUOTE%NRBQUOTE 解析阶段
%STR%NRSTR 编译阶段
%QUOTE%NRQUOTE 执行阶段

  • 例子
  1. Example1:保持开头的空格
%let time=%str(   now);
%let time1=      now;

%put Text followed by the value of time:&time;
%put Text followed by the value of time:&time1;
日志信息
  1. Example2:保护空白,它将被编译为文本


    官方文档截图
  2. Example3:引用可能包含宏引用的值

%macro test;
   Two words
%mend;
%put %nrstr(%test%test) --- %test%test;
日志截图
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容