统计211

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9197|回复: 0
打印 上一主题 下一主题

SAS宏功能

[复制链接]
跳转到指定楼层
1
发表于 2010-5-30 12:05:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
【转帖】简介:
宏的概念在office中比较多见,它主要满足对重复操作的简化。
但是在SAS中,宏的应用也是非常广泛的。可以大大节约我们的时间。接下来,介绍一下SAS的宏。
概念
将一个变量,一段程序或者一个文本命名,供以后调用
SAS宏主要功能:
获取SAS系统信息
SAS在启动时就创建了一些自动宏变量,用以存储当前SAS进程启动的日期,时间,版本号及其它信息,用户可以在任何情况下使用这些宏变量。
条件执行过程步和数据步(重点)
例如每天提交一份生产情况的详细报告,每周五增加一份汇总报告。使用宏功能每天运行同一个程序就可以实现上述任务
开发交互式系统
使用SAS宏语言的%WINDOW语句及一些基本的编程语句可开发交互式用户界面。
产生与数据无关的SAS程序,但可展示与数据有关的结果(重点)
宏功能可保持SAS程序的独立性和移植性。一段程序在多种情况下均可运行,得到期望的结果。
在不同的SAS数据步或过程步之间传递数据
SAS宏变量可在SAS的任何地方被引用,具有全局性,所以成为不同过程间传递数据最方便的手段。
重复执行SAS程序
例:打印20个不同但有规律的SAS数据集中的内容。
%MACRO PRINT;
                   %DO NN=70 % TO 89;
                   Proc print data=year&NN;
                            Title “19&NN Sales Data”;
                   Run;
                   %END;
         %MEND PRINT;
%PRINT;
凡用到SAS宏语言的变量和语言成分,都以符号%或&开始。当SAS程序提交后,在编译阶段,系统对程序逐词扫描过程中,凡遇到%或&开始的词,就启动宏语言处理器对此进行处理:
对于宏变量或宏程序的定义就进行登记
对于宏变量的调用就进行解读(Resolve),对宏程序的调用则读入相应的源程序进行编译
对其它宏语句编译成相应的程序。
%INCLUDE语句
全局语句,可出现在程序任意位置。读入存放在外部文件中的一段文本作为程序并按程序执行。用法: %INCLUDE 文件设定</SOURCE2>
例:标签了dst(‘abc.sas’)的文件中存放的一段SAS程序: %include dst(‘abc.sas’);

宏变量
具有唯一确定的值
存储字符串。
是全局变量。
可以在数据步中被引用,但不能在数据步中用赋值语句定义。
引用时,在变量名前加“&”号。
引用效果是:变量值代替变量名。
宏变量在引用时放在单引号之间不会被解读,只能在双引号之间。
观察宏变量的值:
%put &宏变量名;结果在log窗口中。
宏变量类型
自动宏变量
在SAS进程开始时,或程序运行过程中由系统自动创建
在SAS退出前一直保持有效
是全局宏变量,能在SAS任何地方被引用
查看所有自动宏变量语句:%put _automatic_;
自定义宏变量
由%LET语句定义:%LET 变量名=值;
由symput函数生成,调用方法:call symput(“宏变量名”,变量); 说明:创建一个宏变量,并用第二个参数的内容来给这个宏变量赋值。例:
call symput("teddy",ro);
%put &teddy;
值可以是空的
数字构成的字符串无数值含义,存为字符串
数学表达式不进行赋值
字符串前后空格被删除
若值的字符串中有宏变量的引用,则先解读,后赋值
查看所有自定义宏变量:%put _user_;
查看所有宏变量(自动+自定义)
%put _all_;
宏函数
%STR
在给宏变量赋值时,使用此函数将值扩起来如:%STR(值),程序视作括号内的值为宏变量的值,例:%let print= %str(proc print data =sashelp.class;run;);
那么在之后,可以直接用&print 就可以直接显示sashelp.class这个数据集。
%EVAL
在给宏变量赋值时,使用此函数将值扩起来如:%EVAL(值),若值中含表达式,则先计算表达式的值,再将结果赋给宏变量。
%SYSFUNC
在给宏变量赋值时,为了使用数据步中的函数(如:SUBSTR,SCAN,TRIM,LEFT等;一些数据步函数不能套用此宏函数,如:PUT,INPUT,LAG,DIF等)对值进行加工,需要用此宏函数将值扩起来。如:%SYSFUNC(数据步函数名(自变量)<,输出格式>)。例:%let currdate = %sysfunc(today(),worddate.);
注:在宏或宏语句中嵌套使用数据步函数时,必须在每个数据步函数外使用%SYSFUNC。
字符串中引用宏变量
宏变量与字符串直接用”.”分隔。例:%let drc=v; proc gchart data=dst.project; &drc.bar region; run; (vbar region;)
数据步中生成宏变量
CALL SYMPUT(自变量1,自变量2);
函数SYMGET
得到在数据步中,有表达式动态生成(调用SYMPUT函数)的宏变量的值。
宏程序
%MACRO 宏名称;
         宏文本
%MEND <宏名称>;
注:宏文本只能为,普通文本、SAS语句和程序步、宏变量,宏函数或宏语句、以上内容的组合。
调用时:%宏名称(后不加分号)
含参数的宏
例:%macro printClass(class);
                  proc print data=&class;
                  run;
%mend;
调用:%printClass(sashelp.class)
定义时可给参数赋默认值:%macro printClass(class=sashelp.class);
调用时:%printClass()
小结
SAS的宏还有许多例子,以后还将慢慢讲解。

评分

参与人数 1威望 +2 统计币 +6 贡献 +6 收起 理由
wwy + 2 + 6 + 6

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享1 分享淘帖 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


免责声明|关于我们|小黑屋|联系我们|赞助我们|统计211 ( 闽ICP备09019626号  

GMT+8, 2025-4-20 06:28 , Processed in 0.084846 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表