SAS系统和数据分析SAS宏功能简介

上传人:碎****木 文档编号:220863271 上传时间:2021-12-09 格式:DOCX 页数:11 大小:52.71KB
返回 下载 相关 举报
SAS系统和数据分析SAS宏功能简介_第1页
第1页 / 共11页
SAS系统和数据分析SAS宏功能简介_第2页
第2页 / 共11页
SAS系统和数据分析SAS宏功能简介_第3页
第3页 / 共11页
亲,该文档总共11页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《SAS系统和数据分析SAS宏功能简介》由会员分享,可在线阅读,更多相关《SAS系统和数据分析SAS宏功能简介(11页珍藏版)》请在金锄头文库上搜索。

1、595380545.docSAS 系统和数据分析电子商务系列第十八课 SAS宏功能简介SAS 系统供给了强大的宏功能(macro facility),通过创立宏变量和宏能便利地完成: 重复分析任务,大大精减了程序量从系统猎取一些如 SAS 启动时间、日期、版本号等信息 有条件地执行数据步和过程步保持程序的独立性和移植性,产生与数据无关的程序用宏变量在不同数据步和过程步之间传递数据SAS 宏变量宏变量(也称符号变量)属于SAS 宏语言的范畴,和数据步中的变量概念是不一样的。除了数据行外,可以在 SAS 程序的任何地方定义和使用宏变量。数据步变量是和数据集相联系的,而宏变量是独立于数据集的。数据集

2、变量的值取决于正在处理的观测,而一个宏变量的值总是保持不变,直到被明确改 变。1. 宏变量的定义定义一个宏变量的最简洁方法是使用宏语句LET,它的一般形式如下:% LET宏变量名=值;宏变量的命名遵从一般的 SAS 命名规章。宏变量的值不需要加引号,假设值参加引号, 那么引号被作为宏变量值的一局部。宏变量的值可以是固定的字符串、其他宏变量的引用、宏函数和宏调用。2. 宏变量的引用为了引用一个宏变量的值,在宏变量前加上一个符号&,格式如下:& 宏变量名宏变量被引用的效果就是用宏变量的内容直接替代宏变量名。3. 宏变量的使用举例例如,我们想要打印、图示和分析几个数据集,但又期望避开重复键入每一个数

3、据集名字以修改一样的程序代码。解决方法是用%LET 语句创立一个宏变量 DSNAME,该宏变量赋Page 9 of 7上海财经高校经济信息治理系 IS/SHUFECreated by zxdeng值了一个数据集名 SURVEY。然后,这个宏变量在 PROC PRINT 等很多过程和 TITLE 语句中 被引用。程序如下:%Let dsn ame=survey ;Proc printVar TitleRun ;data=&dsn ame ;n ame sex bdate in come ;“ Display of Data Set &dsname ;要留意标题语句 Title 寻常既可以用单引号

4、又可以用双引号围住标题,但假设有宏变量引用,那么必需用双引号,否那么用单引号将当作字符串处理。上面的程序中,我们只要修改宏变量 ds name 的赋值,就能对多个数据集执行一样的打印输出等操作。可用几个LET 语句来创立多个宏变量进一步增加过程的通用性。例如,我们可用 WHERE 语句来规定用作打印和分析的一个范围。如用 %LET 语句把宏变量 START 和 END 分别定义为开头和完毕的日期。程序如下:%Let dsn ame=survey ;%Let=”01jan79 ” d%Let ends=tart 31dec80;” dProc printVar Where Format Titl

5、eRun ;data=&dsn ame ;n ame sex bdate in come ; &startbdate&end ; bdate date7.;“ Display of Data Set &dsname ;”这样,通过适当的 %LET 语句来简洁转变起始和完毕日期,就能替代在WHERE 语句中的多处改动。提请大家留意宏变量赋值日期常数储值,如改成 %Let start=6940 和%Let end=7670。二、自动宏变量01jan79 ”的这种格式,也可以直接赋日期存SAS 的宏变量共有两种:一是用户定义的宏变量,如我们上面所定义的宏变量start、end。二是自动宏变量,由SA

6、S 系统定义。dsname自动宏变量是在系统启动时就已经被创立,在 SAS 系统退出前始终保持有效, 能够在 SAS系统的任何地方被引用。下表列出一些用户常用的自动宏变量:自动宏变量SYSDATE SYSDAYSYSTIME作用本次 SAS 启动的日期本次 SAS 启动的星期本次 SAS 启动的时间值女口 04AUG97如 Monday如 11:18上海财经高校经济信息治理系 IS/SHUFECreated by zxdengSYSLASTSYSDSN SYSVERSYSSCP最新创立的数据集名字最新创立的数据集两局部名字使用 SAS 软件的版本返回用户主机系统的缩写女口 STUDY.SURV

7、EY女口 STUDY如 6.12如 WINSURVEY例如,我们修改上面的程序,增加一个小标题,在小标题中引用自动宏变量,程序如下:%Let dsn ame=survey ;%Let%Let end=start=”01jan79 ” d”31dec80;” d%Letan alyst= Zux in .De ng ;Proc printVar Where Format Title Title 2Run ;data=&dsn ame ;n ame sex bdate in come ; &startbdate&end ; bdate date7.;“ Display of Data Set &d

8、sname ;”“ &systime &sysday , &sysdate by &analyst ;三、创立一个宏宏是一个被存储的文本,用一个名字识别它。最简洁的宏就像一个宏变量一样工作,但简单的宏可以包 括分支和循环等构造,能实现很多宏变量不能实现的功能。1.宏的定义和调用宏定义的一般形式如下:%MACRO 宏名字参数宏变量; 宏实体;%MEND 宏名字;%MACRO 语句是每一个宏的开头,同时必需给出这个宏的名字。宏实体可为任一个文本,SAS 语句或SAS 步,宏变量、函数和这些实体的组合。MEND 语句必需围住每个宏并表示宏完毕。参数宏变量是一些将要传递给宏调用的宏变量,不同参数宏变量

9、之间用逗号隔开。SAS 程序中可以包括任意多个宏,且在程序中可以屡次调用一个宏。在用的形式如下:上海财经高校经济信息治理系 IS/SHUFESAS 中引用宏调Created by zxdeng%宏名字(参数值)例如,我们定义了一个简洁通用的宏程序INVOKE,它有两个参数宏变量proc name 和dsname,用以传递给宏程序所需的过程名和数据集名。在调用这个宏程序时要将具体的参数 宏变量值给出,其值分别为Print 和 Study.Survey。程序如下:% MACRO INVOKE ( proc name, dsn ame);Proc&proc nameData=&dsn mae ;Ti

10、tle Run ;%MEND INVOKE ;“ & proc name of Data Set &dsn ame ;”%INVOKE (Print , Study.survey);上面这段程序在执行时,将被宏处理器替换成下面这段程序:Proc Print Data=Study.survey ;Title “ Print of Data Set Study.survey ;Run ;2.具有分支和循环的宏与 SAS 系统 DATA 步和 PROC 步中可以使用分支和循环语句一样,也能在MACRO和 %MEND 语句间, 用条件 IF %THEN/%ELSE 语句和用循环 %DO %END、%D

11、O %UNTIL %END、%DO %WHILE %END 语句来产生更简单的宏。虽然 分支和循环的语句格式两者不一样,但两者的使用原理和方法却是一样的。通常比一般的 SAS 语言程序要更难理解,主要的难点是宏程序中宏变量的传递和把握。SAS 宏程序例如,假设我们已有两个宏 CREATE 和 PRINT,宏 CREATE 可以从参数宏变量 SETDATA1 指定的数据集中创立一个新的数据集STUDY.TEMP,宏 PRINT 可以打印一个参数宏变量SETDATA2 指定的数据集。现在我们要定义一个把握宏CONTROL,假定有时需要对指定的数据集先运行宏 CREATE,创立一个新的数据集 STU

12、DY.TEMP 后,再调用宏 CREATE 打印这个新产生的数据集;有时却只要直接打印指定的数据集。那么,我们可以用一个%THEN 语句来定义宏 CONTROL。程序如下:%IF% Macrocreate(set namel);Datastudy.temp ;Set&setnamel ;Ifsex=”M”;% Letdsname=study.temp ;Run ;上海财经高校经济信息治理系 IS/SHUFECreated by zxdeng% Mendcreate% Macro print(setname2);Proc print data=&set name2; Title “Display

13、 of Data Set & set name2 “ Run ;% Mend print ;% Macro control(getdata,dsname);% If %upcase( &getdata)=YES% print (&dsname);% Mend control;% Then %create(&dsn ame);%controI (no, study.survey);%control(yes,study.survey);当规定参数宏变量 getdata 的值为大写字符串 YES 或小写字符串 yes 时,%IF 条件成立, 宏处理器执行 THEN 的分句,即调用宏%create(&

14、dsname)。宏函数%upcase 的作用是转化小 写文本为大写,因此当getdata 的值为小写字符串 yes 时,%IF 条件也成立。在调用宏%create 时要给出参数宏变量 set name1 的值, 使用宏变量&dsn ame 中的值,其值为字符串 study.survey 。当规定参数宏变量 getdata 的值为字符串 YES 或 yes 以外的任何值时, %IF 条件不成立, 执行调用宏%print(&dsname)。提请留意的是,即使 %IF 条件成立,执行完 %THEN 分句后, 也同样要执行调用宏 %pri nt(&ds name),但打印的数据集不同。因此调用宏%print(setname2)执行时,参数宏变量setname2 中的值有两种可能:当 %IF条件成立,执行完宏%create 后,再执行宏 print(setname2)时,setname2 中的值应当为study.temp ;当%IF 条件不成立,直接执行宏study.survey。正由于有如此要求

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 教育/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号