分享

SAS系列29:SAS宏语言(二)

 松哥精鼎统计 2020-10-23
导读

      在SAS的DATA步可以调用SAS函数,在SAS宏语言中也有一些函数,SAS宏函数与SAS函数还是有区别的,一般在函数有带有宏符号“%”的是宏函数。这一期我们介绍宏函数


三、宏函数





       宏函数可扩展宏变量和宏程序的应用,可用于开放代码和宏程序。宏函数的参数可以是文本字符串、宏变量、宏函数和宏程序调用。宏函数的结果总是文本,可以分配给一个宏变量。宏函数也可以直接插入到SAS语句中,以构建SAS语句。宏函数的作用包括:

          提取宏变量的子字符串;

        ★  搜索宏变量的字符串;

        ★  宏变量的值转换为数字,使用宏变量计算;

        ★  在宏语句中可使用SAS语言函数和由SAS /工具包创建的函数;

          可把分号视为一个文本值而不是一个语句的终止符。

        宏函数可分为5类:宏字符函数、宏运算函数、宏引用函数、宏变量属性函数和其他宏函数。我们将从这5类进行简短的介绍。

(一)宏字符函数

      宏字符函数对文本字符串或宏变量进行操作,这些函数可修改它们的参数或提供参数的信息。SAS语言中的字符函数与宏语言函数相对应。表10-3列出宏字符函数及其意义。

10-3 宏字符函数的语法与说明

表10-4 宏字符函数的应用与举例

(二)宏运算函数 

      宏运算函数有两个:%EVAL和%SYSEVALF,处理算术和逻辑表达式,算术和逻辑表达式由操作符和操作数组成。宏运算函数将一个函数参数临时转换为数字,以便有完成计算,宏运算函数将返回的结果转换为文本。

        算术表达应用算术运算符,如“+”和“-”;逻辑表达应用逻辑运算符,如“>”、“<”和“=”。%EVAL函数可将整数(和十六进制数)的字符串转为整数,进行算术和回逻辑运算,也可将代表算术、比较与逻辑的符号转化成宏范畴的符号。%SYSEVALF函数使用浮点算法计算表达式,可以处理包含浮点或者缺失值的宏函数,%SYSEVALF函数中的常用转换格式有布尔型(BOOLEAN)、取整(INTEGER)、取上整(CEIL)、取下整(FLOOR)。

        %EVAL函数的语法如下:

                 %EVAL(算术表达式|逻辑表达式)

        %SYSEVALF函数的语法如下:

                 5SYSEVALF(算术表达式|逻辑表达式<,转换格式>)

表10-5 %EVAL和%SYSEVALF函数应用的举例

(三)宏引用函数

       表10-6 宏引用函数的语法与说明

表10-7 宏引用函数的应用与举例

(四)宏引用函数

       宏变量状态函数有3个:%SYMEXIST,%SYMGLOBL,%SYMLOCAL,这些函数主要可应用于判断宏变量的状态。      

 表10-8 宏变量状态函数的语法与说明    

      以下是关于判断两个宏变量是否存在于global symboltables中:

LIBNAME XJF "E:\MySAS\DATA";
%SYMDEL glbsubset subset;%MACRO makeds(subset); %GLOBAL glbsubset; %LET glbsubset=&subset;
%* 判断在宏makeds中glbsubset和subset的状态; %PUT ******** Inside macro program; %PUT Is SUBSET a local macro variable(0=No/1=Yes):%SYMLOCAL(subset); %PUT Is SUBSET a global macro variable(0=No/1=Yes):%SYMGLOBL(subset); %PUT Is GLBSUBSET a local macro variable(0=No/1=Yes):%SYMLOCAL(glbsubset); %PUT Is GLBSUBSET a global macro variable(0=No/1=Yes):%SYMGLOBL(glbsubset); %PUT ********;
DATA BOOK; SET xjf.ytdsales(where=(section="&subset")); ATTRIB QTRSOLD label='Quarter of Sale'; QTRSOLD=qtr(DATESOLD);RUN;%MEND makeds;
%makeds(INTERNET)
%* 判断宏变量SUBSET和GLBSUBSET是否在global symbol table中?;%PUT Does SUBSET exist (0=No/1=Yes): %SYMEXIST(subset);%PUT Is SUBSET a global macro variable(0=No/1=Yes):%SYMGLOBL(subset);%PUT Is GLBSUBSET a global macro variable(0=No/1=Yes):%SYMGLOBL(glbsubset);
PROC TABULATE DATA=BOOK; TITLE "Book Sales Report Produced &sysdate9"; CLASS QTRSOLD; VAR SALEPRICE LISTPRICE; TABLES QTRSOLD ALL, (SALEPRICE LISTPRICE)*(N*F=6. SUM*F=DOLLAR12.2) / BOX="SECTION:&glbsubset"; KEYLABEL ALL='** TOTAL **';RUN;

图10-8 宏状态函数执行结果

(五)其他宏函数

       表10-9列举了四个宏函数,它们可将SAS语言函数应用于宏变量或文本,还可从运行的操作系统获取信息。其中%SYSFUNC中最常用,其功能也非常强大,通过%SYSFUNC函数可调用包括SAS和SCL在内的所有内置函数。能与%SYSFUNC(%QSYSFUNC)连用的SAS函数有60多个,应用时可查看SAS HELP。       

表10-9 宏引用函数的语法与说明

       以下是宏函数%SYSFUNC应用举例:

%*%SYSFUNC应用与SAS函数GETOPTION连用举例;%MACRO GETOPT(WHATOPT); %LET OPTVALUE=%SYSFUNC(GETOPTION(&WHATOPT)); %PUT OPTION &WHATOPT=&OPTVALUE;%MEND GETOPT;
%GETOPT(PS)%GETOPT(LS)%GETOPT(DATE)%GETOPT(SYMBOLGEN)%GETOPT(COMPRESS)

图10-9  %SYSFUNC与GETOPTION函数连用的执行结果

%*%SYSFUNC与统计函数MEAN连用,并将计算结果传递给宏变量;%LET X=2.34;%LET Y=-2.33;%LET Z=8.77;%LET MEAN=%SYSFUNC(MEAN(&X,&Y,&Z));%PUT ****** The mean of &X, &Y, and &d is &mean..;

图10-10  %SYSFUNC与MEAN函数连用的执行结果    

      整理不易,欢迎点亮再看哦!

参考文献:

[1] 薛富波, 张文彤, 田晓燕, 等. SAS8.2统计应用教程[M]. 北京:兵器工业出版社, 2004

[2] 夏庄坤, 徐唯 , 潘红莲, 等. 深入解析SAS——数据处理、分析优化与商业应用[M]. 北京:机械工业出版社, 2014.

[3] 高惠璇. SAS系统Base SAS软件使用手册[M]. 北京:中国统计出版社, 1997.

[4] 姚志勇. SAS编程与数据挖掘商业安全[M]. 北京:机械工业出版社, 2010.

[5]Michele M. Burlew. SAS Macro Programming Made Easy[M]. Cary, NC: SAS InstituteInc., 2006.

SAS系列推文

【赠人玫瑰,手留余香】

----------------------------------------------

SAS系列28:SAS宏语言(一)

SAS系列27:线性回归

SAS系列26:双变量数据假设检验

SAS系列25:双向有序列联表检验

SAS系列24:单向有序列联表资料的假设检验

SAS系列23:列联表资料假设检验方法

SAS系列22:定性数据假设检验

SAS系列21:SAS统计推断(六)

SAS系列20:SAS统计推断(五)

SAS系列19:SAS统计推断(四)

SAS系列18:SAS统计推断(三)

SAS系列17:SAS统计推断(二)

SAS系列16:SAS统计推断(一)

SAS系列15:SAS数据可视化结果输出

SAS系列14:SAS数据可视化(三)

SAS系列13:SAS数据可视化(二)

SAS系列12:SAS数据可视化(一)

SAS系列11:SAS基础统计过程(三)

SAS系列10:SAS基础统计过程(二)

SAS系列09:SAS 基础统计计算过程

SAS系列08:SAS函数

SAS系列07:SAS数据整理(三)

SAS系列06:SAS数据整理(二)

SAS系列05:SAS数据整理(一)

SAS系列04:SAS数据导入

SAS系列03:SAS入门(二)之SAS编程语言基础

SAS系列02:SAS入门(一)

SAS系列01:统计分析航空母舰-SAS简介

----------------------------------------------

精鼎特邀

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多