SAS宏编程

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本替代到TITLE语句中。TITLE语句变为:
❖ Title “Display of school Student score”;
宏的调用
❖ SAS程序可以包括任意多个宏,且在一个程 序中可以多次调用一个宏。对于简单文本的 阐明,使用宏变量比定义一个宏更有效。然 而,当任务比较复杂时,宏比宏变量更有优 势。
第3章 SAS宏编程
SAS宏的主要功能
❖ 获取SAS的系统信息。SAS在启动时就创建了一 些自动宏变量,用以存储当前SAS进程启动的日 期,时间,版本号及其它信息,用户可以在任何 情况下使用这些宏变量。
❖ 有条件的执行数据步和过程步。例如每天提交一 份生产情况的详细报告,每周五增加一份汇总报 告。使用宏功能每天运行同一个程序就可以实现 上述任务。
❖ 重复执行SAS程序码。凡用到SAS宏语言的变量和 语言成分,都以符号%或&开始。当SAS程序提交 后,在编译阶段,系统对程序逐词扫描过程中,凡 遇到%或&开始的词,就启动宏语言处理器对此进 行处理。
宏变量
❖ 宏变量属于SAS宏语言,但不同于DATA步变 量。可以在SAS程序除数据行之外的任何地 方定义并使用宏变量。一个DATA步变量仅与 一个SAS数据集有联系,而宏变量不依赖于 SAS数据集。宏变量与数据步中变量的主要 区别是,数据步中变量的值往往与被处理观 测有关,而宏变量有唯一确定的值,一个宏 变量存放的值保持不变直到被修改。
宏变量
❖ 宏变量具有唯一确定的值,可以存储字符串, 是全局变量。可以在数据步中被引用,但不 能在数据步中用赋值语句定义。引用时,在 变量名前加“&”号,引用效果是变量值代替 变量名。宏变量在引用时放在单引号之间不 会被解读,只能在双引号之间。
宏变量的产生
❖ SAS系统包含两种类型的宏变量: ❖ 自动宏变量,由SAS系统提供; ❖ 用户定义的宏变量,由用户在程序中定义。
❖ 为了引用一个宏变量的值,放一个&号在宏变量名 字的前面
❖ 模式&name成为宏变量的引用。用户创建宏变量之 后,可以在SAS程序中引用它。
❖ %let exa=score; ❖ title “display of student &exa”; ❖ 宏处理器用宏变量EXA的值替代&exa,SAS系统看
❖ 把宏变量和宏结合在一起,将给出一种用宏 工具编程的强有力的方法。下面我们将介绍 在宏中使用宏变量的多种方法。
宏参数
❖ 可以定义宏变量作为%macro语句的一部分,如: %macro printClass(class);
proc print data=&class; run; %mend printClass; 被定义在一个%macro语句括号内的宏变量称为宏参数。当调 用这个宏时只要给出这些参数的值, %printClass(sashelp.class) 宏处理器把第一个值给第一个宏变量名字,第二个值给第二个 宏变量名字,以此类推(因此这些参数也称为位置参数)。 以上这个宏执行后生成下面语句: ❖ proc print data=sashelp.class; run;
到的是下面的TITLE语句: ❖ title “display of student score”;
多次引用宏变量
❖ 用户根据SAS程序中的需要可以多次引用宏 变量。宏变量的值保持不变直到其被修改。
❖ 每次出现引用&exa,宏处理器用score替代它。
改变宏变量的值
❖ 在上例中,如果用户想要改变SAS数据集名 字,可以在它出现的这段程序中通过改变宏 变量的值来实现
❖ 开发交互式系统。使用SAS宏语言的%WINDOW 语句及一些基本的编程语句可开发交互式用户界 面。
SAS宏的主要功能
❖ 产生与数据无关的SAS程序,但可展示与数据相关 的结果。宏功能可保持SAS程序的独立性和移植性。 一段程序在多种情况下均可运行,得到期望的结果。
❖ 在不同的SAS数据步和过程步之间传递数据。SAS 宏变量可在SAS的任何地方被引用,具有全局性, 所以成为不同过程间传递数据最方便的手段。
❖ %MACRO 宏名称;

宏文本
❖ %MEND <宏名称>;(默认存放在work.sasmacr中);
❖ %MACRO语句是每一个宏的开始,同时必须给出这个宏的 名字。宏名字的命名准则与SAS名字一样。宏的文本也就是 宏的内容,宏内的字符串称为固定文本或模型文本,该文本 将变为用户SAS程序的一部分。%MEND语句必须围住每个 宏并表示宏的介绍。%MEND语句也可以放上宏名字来说明 该宏已结束。
嵌套宏变量引用
❖ 可以使用嵌套的宏变量引用来改变一个长的 宏变量值而不必重新定义这个变量。例如, 为了改变在PROC PLOT步中的两个画图变 量,在PLOT的这个值中使用宏变量引用。
宏的定义
❖ 宏是一个被存贮的文本,用一个名字识别它。最简单的宏就 像一个宏变量一样工作,但复杂的宏可以完成许多宏变量不 能做的事。定义宏的语句格式为:
宏的调用
❖ 为了调用一个宏,放一个百分数符号(%) 在宏名字前面就可以了,比如:%study
❖ 模式“%宏名称”称为宏的调用。当用户定 义一个宏之后,可以在SA源自文库程序中调用它, 如:
❖ Title “Display of school %study”; ❖ 宏处理器执行宏STUDY,把宏里面的固定文
自动宏变量
❖ 在SAS进程开始时,或程序运行过程中由系统自动创建,在 SAS退出前一直保持有效,是全局宏变量,能在SAS任何地 方被引用。以下是一些主要的自动宏变量:
❖ SYSDATE SAS进程开始的日期; ❖ SYSDATE9 以Date9.格式显示SAS进程开始的日期; ❖ SYSTIME SAS进程开始的时间; ❖ SYSSCP 使用的操作系统; ❖ SYSDAY SAS进程开始是为星期几; ❖ SYSVER SAS的版本; ❖ SYSLAST 最新创建的SAS数据集的名字;
定义宏变量
❖ 有两种方式定义宏变量:%LET和call symput。 定义宏变量并分配一个值给宏变量的最简单 方法是使用宏程序语句%LET。格式如下: ❖ %LET 变量名=变量值;
❖ 另一个语句就是call symput,其格式如下: ❖ call symput(变量名,变量值);
宏变量的引用
相关文档
最新文档