SAS宏入门.ppt_第1页
SAS宏入门.ppt_第2页
SAS宏入门.ppt_第3页
SAS宏入门.ppt_第4页
SAS宏入门.ppt_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SAS宏入门 SAS宏的作用 获取SAS系统信息有条件执行数据步和过程步开发交互式系统产生与数据无关的SAS程序在不同的SAS数据步和过程步之间传递数据重复执行SAS程序 简介 定义 可以按照用户的需要对SAS系统进行扩充和定义 以减轻在完成一些相同的统计分析任务时的文本录入量 宏功能包括 宏处理器宏语言两种定义符 名字 宏变量标记 名字 一段宏 简介 对SAS程序书写的约定 用户录入的程序用小写字母 SAS系统看到的程序用大写字母 其中宏变量替代的部分用黑体字表示 注意 有三个以 开头的SAS语句不是宏功能中的内容 它们是 INDUCE LIST RUN语句 主要内容 1 宏变量2 宏3 宏应用实例4 如何提高宏的运行效率 一 宏变量 1 1简介 宏变量 SAS程序中通过替代符号动态地更改文本的工具 只包含字符型数据 具体长度是由赋值给它的文本决定的 值的最大长度为 32K字符分类 用户定义的宏变量自动宏变量全局宏变量局部宏变量 1 2SAS系统定义的宏变量 除了SYSPBUFF之外 所有的自动宏变量都是全局变量 要使用自动宏变量 可以在用户可以给具有读 写状态的自动宏变量赋值 但不能给只读状态的宏变量赋值 使用 PUT AUTOMATIC 可以看到所有可以利用的自动宏变量 表22 1按类别划分的自动宏变量 状态 变量 内容 读 写 SYSBUFFER来自于 INPUT的不匹配的文本 SYSCCSAS对用户的操作环境返回的当前状态代码 YSCMD来自于宏窗口命令行的最后一个不可识别的命令 SYSDEVIC当前图形设备的名字 SYSDMG反映对一个损坏的数据集采取的措施的返回代码 SYSDSN最近使用的SAS数据集的两级名称 SYSFILRCFILENAME语句设置的返回代码 SYSLAST最近使用的SAS数据集的名称 SYSLCKRCLOCK语句设置的返回代码 SYSLIBRCLIBNAME语句设置的返回代码 SYSMSG宏窗口显示的信息 SYSPARMSYSPARM 系统选择项设定的值 SYSPUBFF宏参数值的文本 SYSRC各种与系统有关的返回代码 表22 1按类别划分的自动宏变量 续表 状态 变量 内容 只读 SYSCHARWIDTH字符串宽度值 SYSDATE表示当前SAS工作或运行期间日期的字符串 两年数份 SYSDATE9表示当前SAS工作或运行期间日期的字符串值 两年数份 SYSDAYSAS工作或运行期间的星期几 SYSENV前景或背景荧光屏指示符 SYSERRSAS过程或数据步设置的返回代码 SYSINDEX目前工作期间已经执行的宏数 SYSINFO返回代码信息 SYSJOBID目前一批工作或用户ID的名称 随主机环境改变 SYSMENV当前宏运行的环境 SYSPROCESSID当前SAS操作的ID SYSPROCESSNAME当前SAS操作的名称 SYSSCP操作系统的缩写 SYSSCPL操作系统的名称 STSSITE分配给用户的地点的号码 SYSSTARTID最后一个STARTSAS语句产生的ID 表22 1按类别划分的自动宏变量 续表 状态 变量 内容 SYSSTARTNAME最后一个STARTSAS语句产生的操作名称 SYSTIME当前SAS工作或运行期间时间的字符串值 SYSUSERID当前SAS操作的用户ID或注册号 SYSVER所运行的SAS的版本号 SYSVLONGSAS软件的版本号和维护等级 1 3用户定义的宏变量 1 定义宏变量方法 宏变量名必须以字母和下划线开始 后面跟字母或数字 可以给任意宏变量命名 只要这个名称不是保留字 见表22 2 建议不要使用AF DMS SQL SYS等前缀 因为SAS软件常常把他们用在自动宏变量中 可以使用 PUT ALL 查看到所有用户创建的宏变量 表22 2宏功能中的保留字 ABENDENDMETASYMSUBSTR ABORTEVALNRBQUOTESUPERQ ACTFILENRQUOTESYSCALL ACTIVATEGLOBALNRSTRSYSEVALF BQUOTEGOONSYSEXEC BYGOTOOPENSYSFUNC CLEARIFPAUSESYSGET CLOSEINCPUTSYSRPUT CMSINCLUDEQSCANTHAN COMANDRINDEXQSUBSTTO COPYINFILEQUOTETSO DEACTINPUTQSYSFUNCUNQUOTE DELKEYDEFQUPCASEUNSTR DELETELENGTHRESOLVEUNTIL DISPLAYLETRETURNUPCASE DMIDSPLYLISTRUNWHILE DMISPLITLISTMSAVEWINDOW DOLOCALSCAN ELSEMENDSTR EDITMACROSTOP 可以使用 PUT ALL 查看到所有用户创建的宏变量 1 3用户定义的宏变量 2 1 创建宏变量及对其赋值 最简单方法 使用宏程序语句 LET 其形式为 LET宏变量名 宏变量值其他 DO循环语句 GLOBAL语句 INPUT语句 SQL中的SELECT语句的INTO语句 LOCAL语句 MACRO语句 SCL中的SYMPUT程序和SYMPUTN程序 WINDOW语句 1 3用户定义的宏变量 3 2 引用宏变量 在创建了一个宏变量之后 使用它的方法是在它的名字前加一个与符号 变量名 这称为宏变量引用 macrovariablereference 这一引用通过对宏变量值的解析产生符号替代 要解析一个文本串中的宏变量引用 要把这个文本串用引号括起来 单引号的宏变量引用不被解析 比较下面两个TITLE语句的区别 letcity shanghaititle1 Dataof city title2 Dataof city SAS系统最后显示的标题分别是 Dataofshanghai和Dataof city 用户可以根据需要在SAS程序中多次引用宏变量 宏变量 宏变量的值保持不变 直到用户改变它 例如 letmmm Newcity Datatemp Ifnum 800 run procprint title SubsetofDataSet mmm run 每次出现宏变量引用 MMM 宏处理器用Newcity替代它 所以SAS看到的语句是 DATATEMP SETNEWCITY IFNUM 800 RUN PROCPRINT TITLE SubsetofDataSetNewcity RUN 注意 如果引用了有存在的宏变量 在SAS的log窗口会显示警告信息 有时需要将宏变量引用和前导文本或末尾文本合并起来 例如 DATA PERSNL YR EMPLOYES 其中 YR包括了两位数的年份值 或和另一个宏变量引用合并起来 例如 MONTH YR 这样可以使用户在几个地方使用相同的文本或反复使用一段程序 因为我们可以改变每一次的值 例如 letmmm bought datanew mmm setsave mmm moreSASstatementsifnum 1000 run SAS看到的语句是 DATAMEWBOUGHT SETSAVE BOUGHT moreSASstatementsIFNUM 1000 RUN 注意 宏变量引用不需要连接操作符 SAS系统会自动构造结果字符 这与数据步不一样 有时我们要在文本中对宏变量定界 看下面一段语句 letmmm bought data mmm1 mmm2 setin mmm temp run 这时SAS并不会使用BOUGHT1和BOUGHT2两个数据集 而且给出错误信息 这是因为SAS把MMM1和MMM2当成了两个合法的宏变量名 而不是引用宏变量MMM 在这种情况下 我们要使用宏变量引用定界 上面第二条语句正确的写法应该是 data mmm 1 mmm 2 这时的SAS看到的语句是 DATABOUGHT1BOUGHT2 如果 是SAS的名字的一部分 要使用两个定界符 如下面两级数据集名的例子 setin mmm Temp 这时SAS看到的语句是 SETINBOUGHT TEMP 注意 用户可以在任何宏变量引用后使用定界符 但只有在起界定作用或 是SAS的名字的一部分时 定界符才被解析 所以 下面两名语句在SAS来是等价的 title MMM report title MMMreport 它们都相当于 TITLE bought 1 3用户定义的宏变量 4 3 显示宏变量的值 显示宏变量的值最简单的方法是使用 PUT语句 它将在SAS的log窗口显示结果 如 letx name lety weight letz height put x y z log窗口会显示下列文本 name weight height 系统选择SYSBOLGEN会显示对宏变量的解析 例如 宏变量PRGM和SITE的值分别为PRINTSASUSER ROOM optionssysbolgen lettitle upcasw prgm of upcase site 在上面语句中 SYSBOLGEN选择项会在log窗口显示 SYMBOLGEN MacrovariablePRGMresolvestoprint SYMBOLGEN MacroviaableSITEresolvestosaauser room 1 3用户定义的宏变量 5 4 改变宏变量的值 如果想在SAS程序中改变宏变量的值 只要在该宏变量值改变之前的语句中使用 LET语句对其重新赋值即可 例如下面这段程序 leta data1 leta data2 datatemp datatemp set a set a ifsex 1 ifsex 1 run run procprint procprint title SubsetofDataSet a title SubsetofDataSet a run run SAS系统看到的程序为 DATATEMP SETDATA1 IFSEX 1 RUN PROCPRINT TITLE SUBSETOFDATASETDATA1 RUN DATATEMP SETDATA2 IFSEX 1 RUN PROCPRINT TITLE SUBSETOFDATASETDATA2 RUN 1 3用户定义的宏变量 6 5 间接引用宏变量 比较 put city n put city n 原则 宏处理器从左到右把每两个 使用间接引用引起可以通过一个 DO循环语句产生一系列宏变量引用 例如宏变量CITY1至CITY10包含的值为ShanghaiBeijingGuanzhou Tianjin Chongqing Chengdu WuhanKunming Dalian和Nanjing 则下面的程序 macrolistthem don 1 to10 city n end mendlistthem put listthem 会在SAS的log窗口显示 ShanghaiBeijingGuangzhouTianjinChongqingChengduWuhanKumingDalianNanjing 虽然使用两个以上的 比较罕见 但是用户应该记信住这样一条原则 宏处理器从左到右把每两个 解析成一个 然后解析后面的内容 最后再返回来解析整个宏变量引用 例如下面一段语句 letvar city letn 6 put var n 在第三句中 被解析成 VAR被解析成CITY N被解成千上万 这样 VAR N就解析成 CITY6 最后 SAS显示的是宏变量CITY6的值 即Chendu 至此整个解析过程结束 1 3用户定义的宏变量 7 6 用宏函数对宏变量进行操作 在定义宏变量时 用户可以在表达式中使用宏函数 然后将函数值赋给宏变量 例如 letsite 2010EXPOShanghai letroad scan site 2 在第一个表达式中 宏变量SITE被赋值为字符串2010EXPOShanghai 在第二个表达式中 SCAN函数首先在宏变量SITE中查找第二个单词 为EXPO 然后将EXPO赋值给宏变量RODA 二 宏 2 1宏简介 1 定义 是一段编译好的程序 可以在提交SAS程序或SAS命令行中调用 功能 产生文本包含程序语句 控制何时如何产生文本接受参数 产生用于多处的通用的宏 2 1宏简介 2 编辑宏时 用户必须定义一个宏 通常的形式为 MACRO MEND宏名在SAS中是唯一的 作为一个宏的标志 宏文本是宏语句 宏调用 文本表达式或恒定文本的组合 2 1宏简介 3 调用宏时 使用以下形式 宏名注 对于简单的文本说明 使用宏变量比定义一个宏更有效 但在复杂的任务中 宏比宏变量更有优势 2 2宏语言中的元素 A 语句B 函数C 自动宏变量 A 宏语句 1 作用 用于指示宏处理器执行一项操作 包括一些关键字 特殊的字符和操作符 以分号结束 两类 用于宏定义内和开放代码的宏语句只能用于宏定义内的宏语句 A 宏语句 2 用于宏定义内和开放代码的宏语句 注释 DISPLAY GLOBAL INPUT KEYDEF LET MACRO PUT SYSCALL SYSEXEC SYSLPUT SYSRPUT WINDOW 只能用于宏定义内的宏语句 DO DO 重复 DO UNTIL DO WHILE END GOTO IF THEN ELSE label LOCAL MEND B 宏函数 作用 处理一个或多个参数产生相应的结果 用户可以在宏定义和开放代码内使用宏函数 分类 引用函数字符函数数值函数 C 自动宏变量 见第一节 2 3包含SAS程序的宏 在编制包含SAS程序的宏时 首先用户要根据自己需要编制好SAS程序 然后将其定义在宏中 如下面绘制散点图的宏 macroplot procplot plotheight weight run mendplot 2 4宏参数 宏参数 即 MACRO语句中宏名后括号中的宏变量 如 macroplot x y procplot plotrun mendplot 在调用左边这段宏时 要给出各个参数的值 如 plot height weight SAS看到的语句是 PROCPLOT PLOTHEIGHT WEIGHT RUN 2 5宏表达式 三种 A 文本表达式B 逻辑表达式C 算术表达式宏处理器首先对A进行解析 再计算B或C值 A 文本表达式 定义 是任何文本 宏变量 宏函数或宏调用的组合 通常产生文本 常见的有 BEGIN GETLINE PREFIX PART SUFFIX UPCASE ANSWER B 逻辑表达式OR算术表达式 是一些操作符和算子构成的序列以产生一个结果 算术表达式包括一个算术操作符 如 1 24 34 200FFx 003Ax 逻辑表达式包括一个逻辑操作符 如 DAY FRIDAYA a1 INDEX STARTNE END 在以后调用这个宏时 用 plot就可以 如 datatemp setlab health ifsex 1 run plotprocprint run SAS看到的语句是 DATATEMP SETLAB HEALTH RUN PROCPLOT PLOTHEIGHT WEIGHT RUN PROCPRINT RUN 如果想改变宏内SAS程序的值 可以在SAS程序中引入宏变量 然后在调用这个宏之前用 LET语句对这语句中的宏变量赋值 例如 macroplot procplot Plot X y Run datatemp Setdata1 Ifsex 1 run letx height lety weight plot letx age plotProcprint Run DATATEMP SETDATA1 IFSEX 1 RUN PROCPLOT PLOTHEIGHT WEIGHTRUN PROCPLOT PLOTAGE WEIGHT RUN PROCPRINT RUN SAS系统看到的是下面这此语句 2 4宏参数 把宏变量和宏结合起来 是编制宏时常用的方法 在上面的程序中 我们多次使用了 LET语句 使得程序看起来比较累赘 这时我们可以将宏变量作为宏定义语句 MACRO的一部分 以精简SAS程序 如 macroplot x y procplot plot x y run mendplot MACRO语句后括号中的宏变量称为宏参数 在调用上面这段宏时 我们要给出各个参数的值 如 plot height weight SAS看到的语句是 PROCPLOT PLOTHEIGHT WEIGHT RUN 这样 我们可以将上一节的程序修改为 datatemp setdata1 ifsex 1 run plot height weight plot age weight procprint run 三 宏应用实例 3 1用宏变量替代文本串 letcity Shanghai title Datafor产生语句 TITLE DATAFORSHANGHAI 注意 单引号V S 双引号 3 2用宏产生SAS代码 macroplot procplot plotincome age run mendplot datatemp setin permdata Ifage 20 Run plotProcprint Run DATATEMP SETIN PERMDATA IFAGE 20 RUN PROCPLOT PLOTINCOME AGE RUN PROCPRINT RUN 3 3用宏参数在宏中传递信息 macroplot yvar xvar procplot plot plot yvar income xvar age plot yvar income xvar yrs educ PROCPLOT PLOTINCOME AGE RUN PROCPLOT PLOTINCOME YRS EDUC RUN 用宏参数在宏中传递信息 使用宏参数的好处 可以减少使用 LET语句 而且可以使变量不会对宏外部的程序产生干扰 注意 在上面的宏定义中 宏参数后带有等号 这种宏参数称为关键字宏参数 在调用这种宏时 必须写出宏参数名 等号和所赋给的值 但宏参数的位置可以任意排列 即上面的两个宏调用也可以这样写 plot xvar age yvar income plot xvar yrs educ yvar income 3 4根据条件产生SAS代码 macrowhatstep info mydata if Procreportdata 如果对INFO和MYDATA赋值分别为print和grocery 即 whatstep info print mydata grocery 产生程序为 PROCPRINTDATA GROCERY RUN 如果对参数INFO和MYDATA赋值分别为report和book 即 whatstep info print mydata grocery 产生的程序为 OPTIONSNODATENONUMBERPS 18LS 70FMTSEARCH SASUSER PROCREPORTDATA BOOKNOWD COLUMNMANAGERDEPTSALES WHERESECTOR SE FORMATMANAGER MGRFMT DEPT DEPTEMT SALESDOLLAR11 2 TITLE SALESFORTHESOUTHEASTSECTOR RUN 3 5用循环语句 DO产生重复的文本 macronames name number don 1 to 3 6为宏变量引用产生后缀 macronamesx name number don 1 to注意 在宏变量NAME与字母X间使用了定界符 计算人口调查中的Myer sIndex程序 libnamefam d moh health fam2 dataabc keep eww1 setfam fam2 e int 98 k4 12 6 k5 12 ageinthe10thru49 ifein 10 20 30 40 thenw 1 ifein 11 21 31 41 thenw 2 ifein 12 22 32 42 thenw 3 ifein 13 23 33 43 thenw 4 ifein 14 24 34 44 thenw 5 ifein 15 25 35 45 thenw 6 ifein 16 26 36 46 thenw 7 ifein 17 27 37 47 thenw 8 ifein 18 28 38 48 thenw 9 ifein 19 29 39 49 thenw 10 ifw thendelete ageinthe20thru59year ifein 20 30 40 50 thenw1 1 ifein 21 31 41 51 thenw1 2 ifein 22 32 42 52 thenw1 3 ifein 23 33 43 53 thenw1 4 ifein 24 34 44 54 thenw1 5 ifein 25 35 45 55 thenw1 6 ifein 26 36 46 56 thenw1 7 ifein 27 37 47 57 thenw1 8 ifein 28 38 48 58 thenw1 9 ifein 29 39 49 59 thenw1 10 ifw1 thendelete run frequnciesforagein10thru49 procfreqdata abcnoprint tablesw out f1 procfreqdata abcnoprint tablesw1 out f2 run dataff1 setf1 rename count count1 f1 w count1 dataff2 setf2 rename count count2 w1 10 w1 f2 w1 count2 datam s uniteff1andff2andsumforcount mergeff1ff2 count f1 f2 run procmeanssumnoprintdata m s varcount outputout tempsum sm datamyers drop type freq smpercentsumn mergem stemp sumn sm per count sumn 100 myers abs per 10 run title Myer sIndex procprintnoobsdata myers sumcountpermyers run title procdatasets deleteabcf1f2ff1ff2m stemp run quit libnamefam d moh health fam2 dataabc keep eww1 setfam fam2 e int 98 k4 12 6 k5 12 letage ifein ageinthe10thru49 frequnciesforagein10thru4

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论