锦州卫校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);