2024-05-31 初级SAS学习笔记13(Macro)

         macro 使用的基本形式是:

                %macro macro-name;

                                sas code;

                 %mend macro-name;

macro 定义后的使用方式为:%macro-name

          在宏中加入宏变量的方式如下:

%macro macro-name(parameter-1=,parameter-2=,.......);举例如下:

定义宏:%macro quarterlyreport(quarter=,salesrep=);

使用宏:%quarterlyreport(quarter=3,salerep=smith);SAS解码宏的时候则会把宏变量用值代替;

       

使用宏语句如%IF 或者%DO 来增加宏的灵活度,其使用形式如下:

        %IF condition %THEN action;

                %ELSE %IF condition %THEN action;

                %ELSE action;

        %IF condition %THEN %DO;

                SAS 语句;

        %END;

值得注意的是这些宏语句只能在宏内部使用;经过SAS解码后的标准SAS程度不会含有%IF等这些宏语句,这些宏语句的存在更多是为了区分执行哪些相应的SAS步;举例如下:

        %IF &SYSDAY=Tuesday  %THEN %LET country=Belgium;

                %ELSE %LET country=France;

通常我们使用SAS宏的话,SAS会先解码宏生成标准的SAScode,再编译这些SAScode最后执行;但是只有执行到最后一个阶段,SAS才能得到数据值;我们可以使用call symput命令来解决这个问题,可以在数据步实现读取值并生成宏变量,将某个具体值赋值给宏变量的使用形式如下:

        call symput("macro-variable-name",value);但必须明确一个宏变量只能存放一个值

        引号内的是宏变量名,value可以是变量名,SAS会将该变量的值赋给宏变量,也可以是用引号引用的常值,但我们在data步使用call symput 后却不能在该步使用新生成宏变量,因为只有该data步执行后才会生成宏变量;

        将常值赋值给宏变量名举例如下:

        IF age>=18 then call symput("status","adult");

                else call symput("status","minor");

        将变量名赋值给宏变量举例如下:

        if TotalSales>1000000 then call symput("bestseller",booktitle);

举例如下:

proc sort data=flowersales;

        by descending saleamount;

run;

data _null_;

        set flowersales;

        if _n_=1 then call symput("selectedcustomer",customerid);(把customerid 变量第一行的值赋给selectedcustomer宏变量)

        else stop;

run;

proc print data=flowersales;

        where customerid="&selectedcustomer";

        format saledate worddate18. saleamount dollar7.;

        title "Customer &selectedcustomer Had the Single Largest Order"';

run;

只有在双引号内的宏变量SAS才会解码;单引号内的宏变量SAS不会解码:

原始程序                                         解码后程序

title  ‘Report for &month’      title ‘Report for &month’

title  "Report for &month"     title "Report for january"

以下是编写SAS宏时帮助查找宏错误的或者警告的系统选项:

MERROR(默认)  |   NOMERROR         当没有找到宏时会在日志报warning

SERROR (默认)  |  SERROR    当没有找到宏变量时会在日志报warning

MLOGIC                  |   NOMLOGIC(默认)    把执行宏的过程在日志打印出来

MPRINT                  |    NOMPRINT(默认)     把宏解码生成标准SAS程序在日志打印出来

SYMBOLGEN         |    NOSYMBOLGEN(默认)把宏变量的值在日志中打印出来

使用方式如下:

        options MPRINT NOSYMBOGEN NOMLOGIC;

      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值