锦州卫校2016计划招生:SAS宏

来源:百度文库 编辑:九乡新闻网 时间:2024/04/30 02:27:42
概述
1 宏功能:
1) 获取SAS的系统信息;
2) 有条件的执行数据步和过程步;
3) 开发交互式系统;
4) 产生与数据无关的SAS程序,但可展示与数据相关的结果;
5) 在不同的SAS数据步和过程步之间传递数据;
6) 重复执行SAS程序码;

2 宏语言的管理:
SAS宏语言包括宏变量,相应的程序语句,表达式和函数;
%include的使用:如 %include 'd:\pubMacro.sas' /source2;
source2是可选项,表示在LOG窗口也显示读入的信息;

 

10.2 宏变量的使用和定义
1 宏变量与数据步中变量的主要区别:
      数据步中变量的值往往与被处理观测有关,而宏变量有唯一确定的值;

2 宏变量的特性:
1) 存储字符串,存储的内容也就是宏变量的值;
2) 命名规则:字母或下划线开头,有字母数字和下划线组成,长度不超过32个字节;
3) 全局的宏变量在定义后可以在任何地方被引用;
4) 可以在数据步中引用,但不能在数据步中用赋值语句定义;
5) 在程序中引用宏变量时,只需在变量前加符号"&";

3 宏变量的分类:
1) 自动宏变量:由SAS系统提供;
2) 用户定义的宏变量:由用户在程序中定义;

4 自动宏变量:
一些主要的自动宏变量:
     A SYSDATE   SAS进程开始的日期;
     B SYSDATE9 以Date9.格式显示SAS进程开始的日期;
     C SYSTIME   SAS进程开始的时间;
     D SYSSCP    使用的操作系统;
     E SYSDAY    SAS进程开始是为星期几;
     F SYSVER    SAS的版本;
     G SYSLAST   最新创建的SAS数据集的名字;
    查看SAS所有自动宏变量的命令: %put _automatic_;
    系统选项:options symbolgen是显示每个宏变量解读的值;

5 用户定义的宏变量:
1) 定义形式:%let 变量名=值;或是call symput(变量名,变量值);
     查看SAS所有用户定义的宏变量的命令:%put _user_;
     注意:查看所有的宏变量的命令:%put -all-;
2) 符号表(symbol table):
     对于宏变量,不论是自动的还是用户定义的,系统都将其存在符号表中;
     表有两列,一列是变量名,另一列是值;自动的宏变量都存在一张符号表
     中,用户定义的宏变量可以存在不同的符号表中;

 

6 宏变量定义和使用的进一步介绍
1 %STR宏函数:将一段段程序赋给一个宏变量;
如:%str(data ww;x=1;run;)
    注意:赋值给宏变量的字符串中含引号,可加百分号处理
          如:%let text=Paul's Report;应该写为:%let text=Paul%'s Report;

2 %val宏函数:进行算术或逻辑运算;如:%let m=2; %put value=%(&m+8);

3 %sysfunc宏函数:使用数据步函数;如: %let fmt2=%sysfunc(time(),time5.);

4 字符串中引用宏变量:
常用的情况:文字&宏变量名   &宏变量&宏变量 &宏变量 文字;
最后一种情况 &宏变量 文字这种类型要在文字前加个句号“.”,作为分界符;
如果文字前本身就有一个逗号(如库标记),这时就应该在文件前加两个句号;

5 在数据步执行中生成宏变量:
语法:call symput('宏变量名','值'); 但此处就不能用:%let这中方法,%let后只能赋具体的值;
如:data _null_;
set temp;
call symput('Total',totalpay);
      run;

6 %symget宏函数:通过宏名取宏值;

 

10.3 宏定义
1 简单的宏定义:
      %macro 宏名称;
            宏文本;
      %mend;
      (默认存放在work.sasmacr中)

2 调用宏:
1) 调用的一般形式:%宏名称;
2) 监控宏运行的一些选项:
     a options mprint;
        options nomprint;
        查看SAS语法错误或执行错误,查看宏生成的SAS程序;
    
     b options mlogic;
        options nomlogic;
        开始调用宏的信息、 宏运算的结果、 调用宏结束的信息;
   3) 宏程序中的注释; 用/*和*/将其括起来;
   4) &&和&&&的解读:
      a %let d3=aaaa;
        &&d&i: &&d&i---->&d3---->aaaa; 先解读i并在有2个&&的去掉一个&,然后再解读&d3;
      b %let a=b;
%let b=c;
        &&&a: &&&a---->&b---->c; 先解读a并在有2个&&的去掉一个&,然后再解读&b;

3 含参数的宏:
1) 带定位置参数宏的定义和使用:
定义:
     %macro 宏名称(参数1,参数2...);
   宏文本;
     %mend;
调用:
     %宏名称(参数1,参数2...);
注意:宏定义几个参数,在调用时就调几个参数,哪怕是空值,也得用逗号给分开;

2) 带关键词参数宏的定义和使用:
     定义:
     %macro 宏名称(参数名1=值1,参数名2=值2,...);
    宏文本;
     %mend;
调用:
           %宏名称(参数名1=参数值1,参数名2=参数值2,...);

注意:宏定义中规定的参数在调用时也可以不用(就使用缺省值);

4 局部宏变量;
    在宏中定义的宏变量,在宏调用结束后没记录在宏变量的符号表中,极为局部宏变量;
    所有的全局宏变量使用同一个符号表,局部宏变量可以不止一个,每进入一层宏的调用
    就建立一个局部符号表;结束一个宏调用时就删除相应的符号表;

5 分支结构:
1) 一般形式:
%if 条件 %then %do;
    语句组;
%end;
%else %do;
    语句组;
%end;
   2) 与数据步条件语句的比较:
      宏                           数据步
      只能用在宏定义的程序中       只能用在数据步程序中
      在宏执行过程中执行           在数据步执行过程中执行
      IF后表达式只能使用宏变量     IF后表达式可使用数据步变量或全局宏变量
      决定什么文本送至输入缓冲栈    整个文本送至输入缓冲栈

6 循环结构:
1) DO循环语句:
   %do 指标变量=始点 %to 终点(BY 增量);
     文本或宏程序语句;
%end;
     关注点:用宏循环自动拆分数据集;
2) %do %while 和%do %until:
   %do %while(表达式); /*先判断再执行*/
    文本;
%end;

   %do %until(表达式); /*先执行再判断*/
    文本;
%end;

7 %include读入宏定义:
     如:%include 'd:\aa.sas' ;

8 使用自动调用宏定义:
     options mautosource sasautos=('目录1','目录2',...,sasautos);