SAS宏入门
- 格式:ppt
- 大小:386.50 KB
- 文档页数:68
第10章SAS宏功能10.1 概述SAS系统的MACRO处理器可以让程序更简洁更明了及更容易维护,帮助用户在使用SAS系统时更方便更自动化,具体来说,它具有以下功能:1.获取SAS的系统信息;2.有条件地执行数据步和过程步;3.开发交互式系统;4.在不同的数据步和过程步之间传递数据;5.重复执行SAS代码等等。
.SAS宏语言的管理1.MACRO变量2.MACRO程序语句3.MACRO表达式和函数10.2 SAS宏变量的使用与定义宏变量(有时也称符号变量)属于SAS宏语言的范畴,和数据步中的变量的概念是不一样的。
除了数据行外,你可以在SAS程序的任何地方定义和使用宏变量。
数据步变量是和数据集相联系的,而宏变量是独立于数据集的。
数据集变量的值取决于正在处理的观测,而一个宏变量的值总是不变,直到被明确改变。
宏变量类似于一般变量的命名方法。
程序中以&宏名来引用MACRO变量(有时为了清晰起见,也可以通过&宏名. 来引用MACRO变量)SAS宏变量共有两种:1.系统宏变量2.用户自定义的宏变量。
10.2.1 系统宏变量 一些系统宏变量01 /* Program_10-l-l.sas */02 DA TA _NULL_;03 PUT 'SYSDATE=' "&SYSDA TE"; /* 执行时的日期 */04 PUT 'SYSDAY='"&SYSDAY"; /* 执行时是星期几 */05 PUT 'SYSENV='"&SYSENV"; /* 交互模式或批次模式 */06 PUT 'SYSSCP='"&SYSSCP"; /* 返回正在用的操作系统 */07 PUT 'SYSJOBID = '"&SYSJOBID"; /* 程序的操作执行代码 */08 PUT 'SYSERR='"&SYSERR"; /* 程序执行的错误码 */ 09 PUT 'SYSRC='"&SYSRC";/*程序执行的回复码 */ 10 PUT 'SYSLIBRC='"&SYSLIBRC"; /* 使用LIBNAME 时设置是否正确 */11 PUT 'SYSFILRC='"&SYSFILRC"; /*使用FILENAME 时设置是否正确*/12 RUN;使用宏语句 %put _automatic_; 可以查看所有的系统宏变量,结果显示在LOG窗口。
SAS宏语言基础薛 富 波 第四军医大学卫生统计学教研室 E-mail: xuefubo@一,SAS宏工具简介21. SAS宏工具的基本概念和功能扩展定制 SAS操作 减少文本 输入量文本操作工具SAS编程更加 灵活高效32. 两个新的工作对象宏:以%标识 功能较复杂 文本替换功能 宏变量:以&标识 功能较简单43. SAS宏工具的功能结构语法规则宏语言宏处理器工作单元SAS其它 功能模块54. SAS宏标识符(宏触发器)宏变量解析 宏变量引用宏调用 宏操作 宏语句 宏函数65. SAS宏运行机制文本替 换操作 宏触发 器&和%SAS程序词语扫描器不包含任 何宏代码SAS宏工具SAS编译器7二,SAS宏工具主要功能单元81. 宏变量91.1 宏变量的定义及其基本特性%let mv01=height var001; data test; 宏变量 input sex &mv01; 宏变量值 datalines; …… ; run; proc print data=test; var &mv01; run;是由SAS名字标识的字符串. 取值类型及变量长度. 宏变量值的恒定性. 与SAS数据集变量的区别. 宏变量的应用场合.101.2 用户定义宏变量与自动宏变量%let dataset=sashelp.class; %let time=20050727; %put _user_;用户自定义宏变量%put _automatic_; title "Report produced at &sysdate9., &sysday";自动宏变量111.3 局部宏变量与全局宏变量局部宏变量. %macro test; %let localvar=12345; %put _user_; %mend; %test 全局宏变量. %let globalvar=2005; %global sasvar; %put _user_;局部宏变量 局部符号表全局宏变量全局符号表121.4 宏变量的使用%let var=weight; 宏变量引用 %let data=sashelp.class; 字符常量中引 proc print data=&data; 用宏变量,须 var &var; 使用双引号 title "Contents of dataset &data for variable &var"; run; %let i=10; 字符与宏变量 %let j=5; 使用分隔符连接 可直接连接 %let t1=text in line&j; 字符与宏变量. %let t2=text in line&j.page&i.underscored; %let lib=sashelp; 宏变量引用后圆点符号的使用 %let data=&lib..class;131.5 宏变量的间接引用%macro test; 创建一系列宏变 data _null_; 量,lev1, lev2, … set sashelp.class end=last; call symput(("lev"||compress(_n_)),age); if last then call symput("levn",compress(_n_)); 存储上述宏变量 run; 总个数的宏变量 %do i=1 %to &levn; 宏变量间接引用 %put lev&i=&&lev&i; %end; 在各级别的宏变量名称 %mend test; 前添加2的k-1次方个&14宏变量间接引用的工作机制文本字符串 文本替换 宏处理器 &字符扫描&&lev&i&lev114151.6 应用宏函数处理宏变量值%let a=weight/height/sex; %let b=%scan(&a,2,/); %let c=%substr(&a,8,6); %let i=9; %let j=%eval(&i*2+1); %let k=%scan(&a,1,/)is%eval(&i*7-3)kg;宏函数可与字 符混合使用, 也可同时使用 多个函数,且 其前后顺序可 任意排列162 宏的定义与调用172.1 宏的概念与功能宏调用 宏:已编译程序段 特定代码文本可接受宏参数可执行逻辑控制 等各项操作功能182.2 宏的定义与调用以%macro语句为开始 宏 的 定 义%macro mtest(times); %do i=1 %to × %put putting process is performed for &i times; %end; %mend mtest;以%mend语句为结尾宏 调 用%mtest(10)192.3 宏参数位置参数当前宏的局 部宏变量 带默认值的关键字%macro paratest(pos1,pos2,key1=default1,key2=default2); %put the first positional parameter is &pos1; %put the second positional parameter is &pos2; %put the first keyword is &key1; %put the second keyword is &key2; %mend paratest; /*仅有两个位置参数,关键字将取默认值*/ %paratest(para1,para2) /*位置参数变换位置,关键字取给定值*/ %paratest(para2,para1,key1=keyword1,key2=keyword2) /*关键字变换位置,不影响输出结果*/ %paratest(para1,para2,key2=keyword2,key1=keyword1)20。
很全的sas基础知识(一)5.1SAS表达式简介1.SAS常数表达式(1)数值常数如: 1.23、-5、0.5E-10。
(2)字符常数如: name1='TOME'、name2='MARY'、name3='JOHN'。
(3)日期(d)、时间(t)、日时(dt)常数如: d1='01JAN80'd、t1='9:25:19't、dt1='18JAN80:9:27:05'dt。
(4)16进制常数(略)2.SAS运算符(1)前缀算符与后缀算符前缀算符, 即正号或负号; 如: +Y; -25; -COS(30); +(X*Y); 后缀算符,即两个运算对象之间的运算符号, 如: 1+9; 4-2; 6<8。
(2)只含一个运算符的简单表达式(Ⅰ组)和含有多于一个运算符的复合表达式(Ⅱ组)Ⅰ组, 如: A+B; C-D; E*F; G/H; Ⅱ组, 如: 1-EXP(N/(N-1));100-LOG(N*(N+1));(3)操作运算的顺序求一个复合表达式的值时, 其操作运算的顺序和优先级遵从如下的规则(见表5.1): 表5.1SAS的运算符及其在运算顺序上的优先级━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━优先级组别运算符号等价表示运算符号含义之说明━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━第0 组()括号第 1 组**+-乘方, 正数, 负数^><<>NOT MIN MAX逻辑非, 最小, 最大第 2 组*/乘, 除第 3 组+-加, 减第 4 组‖或||字串连接第 5 组<<=LT LE小于, 小于等于=^=EQ NE等于, 不等于>=>GE GT大于等于, 大于IN等于一列元数中的某一个第 6 组&AND逻辑与第7 组|或|OR逻辑或━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━各组的计算顺序分别为: 第0组由内向外;其他各组均自左至右。
The little SAS book 学习笔记第七章使用SAS宏功能灵活写代码7.1 宏概述宏以前被认为是经验老道的SAS程序员使用的高级技术。
但现在新手也能够了解一些。
幸运的是,宏的基本功能不是那么难理解。
本章介绍的最普遍使用的SAS宏语言的特征。
宏处理器标准SAS程序中,提交程序后,SAS就编译并立即执行。
但宏语句多了一步,在提交之后,SAS会将宏语句传送到宏处理器上,将其转变为SAS标准代码,通常叫做“变换代码”(meta-programming.)宏和宏变量SAS宏代码包括两个基本部分:宏命令和宏变量。
宏变量通常加一个“&”作为前缀,而宏命令通常加一个“%”作为前缀。
局部VS全局宏变量有局部宏变量和全局宏变量。
如果在宏的内部定义则为局部宏变量,只能在内部使用。
如果在开放代码中定义则为全局宏变量。
避免两种错误:在宏之外(开放代码)使用局部变量;创建同名的局部变量和全局变量。
启动宏处理器使用宏指令之前必须将宏系统选项打开,尽管有时默认是打开的。
可以用下面代码查看是否打开:PROC OPTIONS OPTION=MACRO; RUN;查看日志,如果看到MACRO,则打开了;如果看到NOMACRO,则没有打开。
避免宏错误宏会让人很头痛,可以通过分段形式避免。
首先,用SAS标准语言写下程序;接着,将其转变为宏代码。
7.2 用宏变量提交文本用%let创建一个宏变量最简单给宏变量分配一个值的方法是%let,基本形式为:%LET macro-variable-name=value;宏变量名必须符合SAS命名法则,(少于等于32字节、以字母或下划线开头、只能包括字母、数字和下划线),下面创建了宏变量:%LET iterations=10;%LET country=New Zealand;当赋值字符串时,不需要加引号。
除非在开头和结尾有空格,否则从等号到分号的全部内容都是变量值。
使用宏变量宏变量前面要加前缀&,注意宏处理器找不到单引号内的宏变量,只能用双引号。
第10章SAS宏功能10.1 概述SAS系统的MACRO处理器可以让程序更简洁更明了及更容易维护,帮助用户在使用SAS系统时更方便更自动化,具体来说,它具有以下功能:1.获取SAS的系统信息;2.有条件地执行数据步和过程步;3.开发交互式系统;4.在不同的数据步和过程步之间传递数据;5.重复执行SAS代码等等。
.SAS宏语言的管理1.MACRO变量2.MACRO程序语句3.MACRO表达式和函数10.2 SAS宏变量的使用与定义宏变量(有时也称符号变量)属于SAS宏语言的范畴,和数据步中的变量的概念是不一样的。
除了数据行外,你可以在SAS程序的任何地方定义和使用宏变量。
数据步变量是和数据集相联系的,而宏变量是独立于数据集的。
数据集变量的值取决于正在处理的观测,而一个宏变量的值总是不变,直到被明确改变。
宏变量类似于一般变量的命名方法。
程序中以&宏名来引用MACRO变量(有时为了清晰起见,也可以通过&宏名. 来引用MACRO变量)SAS宏变量共有两种:1.系统宏变量2.用户自定义的宏变量。
10.2.1 系统宏变量 一些系统宏变量01 /* Program_10-l-l.sas */02 DA TA _NULL_;03 PUT 'SYSDATE=' "&SYSDA TE"; /* 执行时的日期 */04 PUT 'SYSDAY='"&SYSDAY"; /* 执行时是星期几 */05 PUT 'SYSENV='"&SYSENV"; /* 交互模式或批次模式 */06 PUT 'SYSSCP='"&SYSSCP"; /* 返回正在用的操作系统 */07 PUT 'SYSJOBID = '"&SYSJOBID"; /* 程序的操作执行代码 */08 PUT 'SYSERR='"&SYSERR"; /* 程序执行的错误码 */ 09 PUT 'SYSRC='"&SYSRC";/*程序执行的回复码 */ 10 PUT 'SYSLIBRC='"&SYSLIBRC"; /* 使用LIBNAME 时设置是否正确 */11 PUT 'SYSFILRC='"&SYSFILRC"; /*使用FILENAME 时设置是否正确*/12 RUN;使用宏语句 %put _automatic_; 可以查看所有的系统宏变量,结果显示在LOG窗口。
SAS宏:9步法SAS宏主要包括两部分:宏变量和宏函数通过使用SAS宏,可以更加容易维护SAS代码,是程序更加灵活,动态执行。
一般来说,通过写宏函数执行代码需要9个步骤第1步:写好程序,并且确保程序能够正确运行proc means data=expenses mean;var RoomRate;run;proc print data=expenses;title 'Lowest Priced Hotels in theEXPENSES Data Set';footnote 'On June 1, 2003';var ResortName RoomRate Food;where RoomRate<=221.109;run;宏功能使程序每次能够自动根据数据集的变化进行改变第2 步:使用宏变量帮助文本替换宏变量提供文本替换,这样可以使用简单的单词或者词组,不需要大段的代码。
宏变量包括:自动宏变量,用户自定义宏变量%let,在数据步或者sql过程步使用的用户自定义宏变量call symput。
不管是如何创建宏变量,在程序中引用宏变量通过&。
options symbolgen;%let dsn=expenses;%let varlist=ResortName RoomRate Food;proc means data=&dsn mean;var RoomRate;run;%let average=221.109;proc print data=&dsn;title "Lowest Priced Hotels in the &dsnData Set";footnote "On &sysdate9";var &varlist;where RoomRate<=&average;run;SYMBOLGEN在日志窗口中记录宏变量是如何解析的。
SAS讲义-第十一课宏语言SAS宏的功能:将一个变量,一段程序或者一个文本命名,供以后调用,是用于扩充和制做用户化SAS系统的工具;利用宏功能用户可以减少在完成一些共同任务时必须输入的文本量。
简单地说,就是把重复性的工作模块化!一、宏变量宏变量的定义方法是:%let 宏变量名=宏变量值;宏变量的引用方法是:&来引用。
例1 %let x=30;data a;m=&x;run;当SAS程序提交后,在编译阶段,系统对程序逐词扫描过程中,凡遇到%或&开始的词,就启动宏语言处理器对此进行处理。
例2 data score;input math@@;cards;71 81 91;run;%let exa=score;data temp;set &exa;if math>80;run;二、宏程序宏程序简称宏,是一个被存储的文本,最终都会被编译并执行。
但是宏不是一个简单的文本,它可以通过控制和循环语句来控制文本的输出。
另外,宏还包含参数,通过调用不同的参数值可以多次重复使用宏,从而简化程序的开发工作。
一个宏程序最终被系统的编译器执行,中间需要经过三个步骤:1)定义宏:创建一段程序文本。
2)编译宏:运行这段文本;运行的结果将存储到SAS宏目录。
该阶段系统只编译不解析。
3)调用宏:从宏目录中调用一个宏名字。
系统解析宏程序,将解析结果传至编译器,执行具体的程序语句。
1、宏定义的格式:%macro test;Data a;X=1;Run;%mend test;在格式中,%macro是定义宏的关键字,test是宏的名字,%mend是宏定义结束的标志。
夹在%macro和%mend的文本是宏的主体信息,该例子实际上定义了一个名为test的宏,主体信息是一个data步。
2、调用宏的格式如果调用上例的宏,即为:%test;3、宏内宏一个宏内可以再嵌套一个宏。
例3%macro test;Data a;X=1;Run;%mend test; /*定义了一个名为test的宏*/%macro prt;Proc print data=sashelp.class;run;%mend prt; /*定义了一个名为prt的宏*/%macro nest;%test;%prt;%mend nest; /*定义了一个名为nest的宏,其主体是调用另外两个宏*/%nest; /*调用名为nest的宏*/三、宏参数从上面看似乎宏只是一些文本的堆彻,其实不是,宏参数将发挥重要的作用。