您好,欢迎访问三七文档
SAS语言的宏功能返回本章教学目的:了解SAS宏的功能和特点掌握SAS宏变量的定义与调用掌握SAS宏及宏参数的定义与调用掌握SAS宏语言的流程控制结构了解宏与数据步的信息交换子程序本章内容:1.概述2.宏变量3.宏4.宏参数5.宏内流程控制结构6.宏与数据步的信息交换7.宏语句与宏函数返回1.SAS/IML模块1.1SAS/IML模块简介1.2IML变量1.3启动和退出SAS/IML模块1.4设置和关闭IML交互模型返回1.概述宏工具是一种可以用来扩展SAS功能,减少普通工作文本输入量的SAS工具。宏工具可以给一段文本或SAS程序命名,并通过引用这个名称来使用这段程序或文本。宏工具的功能非常强大,使用宏工具来完成以下任务:使用宏变量实现文本替代;使用宏产生程序语句;使用宏循环及条件判断语句完成程序交互。实例:在工作目录(d:\mysasfile)下有4个文件,文件名为df1.txt,df2.txt,df3.txt,df4.txt。它们代表4个推销员的销售业绩,每个文件格式相同,都包括日期和销售额。现要求把这4个推销员的记录读入到SAS中,分别生成4个数据集,然后合并成一个大数据集。2.宏变量宏变量的用途是替代SAS程序文本,宏变量值的最大长度是65534个字符。宏变量的长度是由自身的文本长度决定的,而不是通过设定得到的。宏变量按照使用范围分类:全局宏变量和局部宏变量。全局变量可以在SAS对话运行期间使用并且可以在程序的任何地方引用局部变量则只能在创建该局部变量的宏中使用,在这个宏之外,这个局部变量就没有任何意义。主要内容2.1定义宏变量2.2引用宏变量2.3显示宏变量的值2.4如何隔开宏变量引用和文本2.5间接引用宏变量2.1定义宏变量最简单定义宏变量的方式是使用程序语句%LET。格式:%LET宏变量名=值;如:%letdsn=sasuser.class;注意如果宏变量dsn已经存在则其值会被替换掉.2.2引用宏变量宏变量定义以后,可以通过在其名称前使用&来对其引用。例1:引用宏变量a的程序段:上段程序等价于:dataa;setSasuser.class;run;例2:在带有引号的文本中引用宏变量时,需要将这个文本字符串用双引号括起来。如:注:在引号内引用宏变量的值时必须用双引号。因为宏处理器只能在双引号内进行替代。例3:多次引用宏例4:宏变量的值为一段完整的程序段。注:(1)必须使用%str()函数围住宏变量的值,以后用&d来引用此段程序。(2)此例中使用了宏变量嵌套。2.3显示宏变量的值格式:%put&宏变量名|其它文本text;2.4如何隔开宏变量引用和文本在混合使用宏变量引用和文本的时候,会遇到宏变量后面紧跟着文本的情况。如定义宏变量name后,当使用&name1,&name2时,如果不定义name1和name2这两个宏变量,系统就会提示这两个宏变量并不存在,因为在SAS识别宏变量的时候,自动将name1和name2当成了宏变量的名称。在宏的引用过程中,当词段扫描器识别一个宏变量名称时,从&开始直到遇到一个SAS名称中不允许出现的字符为止。所以空格等一些不允许出现在SAS名称中的字符就可以作为分隔符出现,但是为了不显示这些分隔符,一般使用句号来作为分隔符使用。2.5间接引用宏变量前面提到的使用&变量名来引用宏的方式是直接引用,有时还会用到很有用的间接引用方式。如对一系列的宏变量引用,如data1,data2,data3,这一系列中部分文本是固定的名称,而另一部分是变化的数字。这时就可以采取间接引用方式。3.宏概念:宏是被编辑过可以从SAS程序中调用的程序主要内容:3.1宏的定义3.2宏的调用3.1宏的定义一般格式为:%Macro宏名;…宏文本;%Mend[宏名];说明:%macro语句表示开始一个宏定义,并给宏规定一个名称;宏的文本可以是SAS语句和程序、宏变量、宏函数或宏语句。%Mend语句表示宏的结束,后面加宏名,也可不加。当一个宏被提交时,系统会对它进行宏编译,但并不执行。检查宏语句的语法,若有错误在Log窗口中显示。3.2宏的调用用一个百分号%加宏名字就可以调用一个宏。例8:宏的定义与调用4.宏参数定义带参数的宏的一般形式为:%macro宏名称(参数1,参数2,….);…宏文本;%mend;说明:其中参数列是逗号分开的参数名,参数列中提到的参数在宏文本中作为宏变量引用调用带参数的宏的一般形式为:%宏名称(参数1,参数2,….);说明:每个参数值将赋予宏定义中相应位置的参数。例9:宏参数的定义与调用例10:宏内调用宏5.宏内流程控制结构5.1宏do循环语句5.2条件判断语句5.1宏do循环语句1)计数型循环格式:%Do循环变量=初值%to终值[%By步长];循环体;%End;注:执行循环体时循环变量是一个宏变量i。例11:利用宏do循环,输出文本123...10。5.1宏do循环语句2).直到型循环格式:%Do%Until(表达式);循环体;%End;3).当型循环格式:%Do%While(表达式);循环体;%End;注:当型循环和直到型循环需自己设置一个宏变量作为循环变量,对循环变量累加赋值时需使用函数%eval()来计算算术表达式的值,见程序。例12:利用宏dowhile循环,输出文本123...10。5.2条件判断语句格式:%If表达式%then语句1;%Else语句2;注:当语句为复合语句时,需用%do…%end结构。动手练习:利用宏编写一个求绝对值的程序:思考:对例11的进一步思考改进1:要求输出指定次数的文本12...10改进2:要求输出指定字符指定次数的文本:Class1Class2....Class10改进3:要求生成一系列以指定字符指定个数为名称的数据集,如Class1Class2....Class10,每个数据集的内容为循环变量值6.宏与数据步的信息交换SAS利用宏在不同的数据步、过程步之间传递信息。数据步的symput是一个特殊的子程序:它能利用数据步运行中的变量值给一个宏变量赋值。Symget也用于数据步中,作用和symput相反,可以在数据步执行时得到宏变量的值。注意到这两个子程序需用call语句调用。Symget用得相对少些,只要求理解symput子程序。例14:假设有一个数n放到数据集a中,我们希望在程序中用到这个数,比如用在脚注中,可用如下程序:例15:利用宏变量在两个数据步间传递信息,如7.宏语句与宏函数(参见教材P75)SAS宏语言所用的一些语句和函数参见教材P75,在此不作详细介绍。最后请同学们自己来运行教材70的实例,并体会宏的功能。作业:P80题6掌握自学方法事半功倍返回
本文标题:SAS语言的宏功能
链接地址:https://www.777doc.com/doc-7767444 .html