在日常的SAS编程中,经常会使用一些宏函数来达到特定的功能。这篇文章来介绍一下,我工作中常用的一些宏函数。
1、%sysfunc
宏函数%sysfunc是在宏语句中执行SAS或用户自己定义的函数,语法如下:
%SYSFUNC(function(argument(s))<, format>)
我常用的就是用%sysfunc执行函数Tranwrd
,从而达到对宏变量值的一些微小的修改。在项目编程中,一些基础的信息会提前配置好保存到宏变量中,例如Output的输出名称。我遇到过几次输出名称超过32个字符以及名称中有连字符(-)的情况。这样的话,我进行输出同名数据集时SAS就会报错。处理方法很简单,缩写单词或者删减单词,用下划线(_)替代连字符(-)。
这里有个注意点,项目中提前设置好的宏变量的值我们不应该改动,应该直接新建一个宏变量来保存修改好的值。否则就是,Hard Coding了。
下面我给出代码示例:
%let name = aaa-bbb-cccc;
%let name_ = %sysfunc(tranwrd(&name, - , _));
%put &name.;
%put &name_.;
运行的结果如下:
2、%str 和%nrstr
这两个宏函数作用是,在宏编译时,以常量文本掩盖特殊字符和助记符。语法如下:
%STR(character-string)
%NRSTR(character-string)
这两个函数的作用主要分为以下3类:
- 它们会掩盖了以下特殊字符和助记符:
/ + − * < > = ¬ ^ ~ ; , # blank
AND OR NOT EQ NE LE LT GE GT IN
- 它们还会掩盖成对出现的引号、括号,或者前面有百分号(%)标记的不成对引号、括号:
' " ( )
- 除了上面所讲,%NRSTR还掩盖了跟宏息息相关的百分号和取地址符合:
& %
用具体代码演示常用放af,比较容易理解:
- 在给宏变量赋值时,保留值前面的空格:
%let var1 = hahaha;
%let var2 = %str( hahaha);
%let var3 = %nrstr( hahaha);
%put I will&var1.;
%put I will&var2.;
%put I will&var3.;
从输出可以看出,两个函数保留了输入前的空格:
- 掩盖引号的作用:
%let var1 = I'm happy;
%let var2 = %str(I'm happy);
%let var3 = %str(I%'m happy);
未完待续,后面有空继续补充。