1. %str  和 %nrstr

%str(character-string)  
%nrstr(character-string) 

这两个函数属于 Macro quoting function, 作用是:在宏编译时,当存在特殊字符影响到宏编译的结果时,将其放入这两个函数中就可以掩盖这些字符。可以掩盖的字符有:

除此之外,%NRSTR 还可以掩盖 & 和 % . 注意:如果是不成对的引号或括号,在%STR 或 %NRSTR 中使用时,必须在其前面添加符号%。

例子:

%let a=%str(this is test);
%let b=%str(  this is test);
%let c=%str('this is test');
%let d=%str(proc print;run;);

Reference :  Macro Quoting: %STR and %NRSTR Functions (sas.com)

2. %sysfunc

%SYSFUNC (function(argument(s))<, format> )
%QSYSFUNC (function(argument(s))<, format> )

作用是:在宏语句里执行函数。

例子:

 /*普通函数需要引号的,放进sysfunc后无需添加引号*/
 dsid=open("sasuser.houses","i");
 dsid=open("&mydata","&mode");

 %let dsid = %sysfunc(open(sasuser.houses,i));
 %let dsid=%sysfunc(open(&mydata,&mode));

%SYSFUNC 无法掩盖特殊符号,%QSYSFUNC 可以掩盖下列特殊符号:

当%SYSFUNC或%QSYSFUNC引用的函数需要数值型参数时,参数会被自动转化成数值型。还有一些无法被%SYSFUNC或%QSYSFUNC使用的SAS函数:

Instead of INPUT and PUT, which are not available with %SYSFUNC and %QSYSFUNC, use INPUTN, INPUTC, PUTN, and PUTC.

CAUTION:
Values returned by SAS functions might be truncated.
Although values returned by macro functions are not limited to the length imposed by the DATA step, values returned by SAS functions do have that limitation.
 

3. %scan 和 %qscan

%SCAN(argument, n<,charlist <,modifiers> > )
%QSCAN(argument, n<,charlist <,modifiers> > )

这两个函数的作用是:在一个字符串中根据某个词所在的位置查找该词,每个词由分隔符分隔。

%SCAN 无法掩盖特殊符号,%QSCAN 可以掩盖下列特殊符号:

例子:

%let name=%str(Marry*James*Black); /*remove %str() is okay because macro processor can deal charater without quotation*/
%put &name;  /* Marry*James*Black */
%let firstname=%scan(&name,1,%str(*));
%let midname=%scan(&name,2,%str(*));
%let lastname=%scan(&name,3,%str(*));
data test;
  firstname="&firstname"; /*must be quoted*/
  midname="&midname";
  lastname="&lastname";
run;

Reference : %SCAN and %QSCAN Functions :: SAS(R) 9.3 Macro Language: Reference

4. %sysevalf 和 %eval 

%SYSEVALF(expression<, conversion-type>) /*conversion-type是浮点计算类型*/
%EVAL(expression)

这两个函数的作用是:在宏语句里求算数运算和逻辑运算的值,返回的结果是文本。%SYSEVALF 可以计算浮点数,%EVAL只能计算整数,因此当有浮点数时必须使用%SYSEVALF。%EVAL 是SAS默认的计算方式。%SYSEVALF 是唯一可以计算包含浮点数或缺失值的逻辑运算的函数。

%SYSEVALF 的 conversion-type 有四种:BOOLEAN,CEIL,FLOOR,INTEGER。如果不定义 conversion-type,返回的结果类型不变。

%sysevalf(1/3,boolean)        /* returns 1 */
%sysevalf(1 + 1.1,ceil)       /* returns  3 */
%sysevalf(-2.4,floor)         /* returns -3 */
%sysevalf(2.1,integer);       /* returns  2 */

 Reference :Macro Functions: %SYSEVALF Function (sas.com)

 Other reference : SAS学习笔记44 宏函数 - 特殊的苹果 - 博客园 (cnblogs.com)

posted on 2022-10-05 16:00  MOZY  阅读(1228)  评论(0编辑  收藏  举报