bozo-瓯剧
SAS
系统和数据分析
电子商务系列
第十八课
SAS
宏功能简介
< br>SAS
系统提供了强大的宏功能(
macro faci
lity
)
,通过创建宏变量和宏能方便地完成:
?
重复分析任务,大大精减了程序量
?
从系统获取一些如
SAS
启动时间、日期、版本号等信息
?
有条件地执行数据步和过程步
?
保持程序的对立性和移植性,产生与数据无关的程序
?
用宏变量在不同数据步和过程步之间传递数据
*
一
.
p>
SAS
宏
变
量
p>
宏变量(也称符号变量)属于
SAS
p>
宏语言的范畴,和数据步中的变量概念是不一样的。
除了数据行外,
可以在
SAS
程序的任何地方定义和使用宏变量。数据步变量是
和数据集相联
系的,而宏变量是独立于数据集的。数据集变量的值取决于正在处理的观测
,而一个宏变量
的值总是保持不变,直到被明确改变。
1
宏变量的定义
定义一个宏变量的最简
单方法是使用宏语句
%LET
,它的一般形式如下:
%
LET
宏变量名
=
值
;
宏变量的命名遵从一般的
SAS
p>
命名规则。宏变量的值不需要加引号,如果值加入引号,
则引号被作
为宏变量值的一部分。宏变量的值可以是固定的字符串、其它宏变量的引用、宏
函数和宏
调用。
2
宏变量的引用
为了引用一个宏变量的
值,在宏变量前加上一个符号
&
,格式如下:
< br>
&
宏变量名
宏变量被引用的效果就是用宏变量的内容直接替代宏变量名。
3
宏变量的使用举例
例如,我们想要打
印、图示和分析几个数据集,但又希望避免重复键入每一个数据集名
字以修改相同的程序
代码。解决方法是用
%LET
语句创建一个宏变量
DSNAME
,该宏变量赋
值了一个数据集名
SURVEY
。
然后这个宏变量在
PROC PRINT
等许多过程和
TITLE<
/p>
语句中被
引用。程序如下:
上海财经大学经济信息管理系
IS/SHUFE
Created by zxdeng@
Page 1 of
6
SAS
系统和数据分析
电子商务系列
%Let
dsname=survey
;
Proc print
data=&dsname
;
Var
name
sex
bdate
income
;
Title
“Display
of Data Set &dsname”
Run
要注意标题语句
Title
平时既可以用单引号又可以用双引
号围住标题,
但如果有宏变量引
用,则必须用双引号,否则用单
引号将当作字符串处理。上面的程序中,我们只要修改宏变
量
d
sname
的赋值,就能对多个数据集执行相同的打印输出等操作。
可用几个
%LET
语句来创建多
个宏变量进一步增强过程的通用性。例如,我们可用
WHERE
语句来规定用作打印和分析的一个范围。如用
%LET
语句把宏
变量
START
和
END
分别定义为开始和结束的日期。程序如下:
%Let
dsname=survey
;
%Let
start=?01jan79?d
;
%Let
end=
?31dec80?d
;
Proc
print
data=&dsname
;
Var
name
sex
bdate
income
;
Where
<
br>一是用户定义的宏变量,
<
br>系统定义。
&start
;
Format
bdate date7.
;
Title
“Display
of Data Set &dsname”
Run
这样,通过适当的
%LET
语句来简单改变起始和结束日期,
就能替代在
WHERE
语句中
的多处改
动。
提请大家注意宏变量赋值日期常数
?01jan79?d<
/p>
的这种格式,
也可以直接赋日期存
储值,
如改成
%Let
start=6940
和
%Let
end=7670
。
二
.
自
p>
动
宏
变
量
SAS
的宏变量共有两种:
如我们上面所定义宏变量
dsn
ame
、
start
、
end
。二是自动宏变量,由
SAS
自动宏变量是在系统启动时就已经被创建,
在
SAS
系统退出前一直保持有效,<
/p>
能够在
SAS
系统的任何地方被引用。下
表列出一些用户常用的自动宏变量:
自动宏变量
SYSDATE
SYSDAY
SYSTIME
SYSLAST
SYSDSN
作用
本次
S
AS
启动的日期
本次
SAS
启动的星期
本次
p>
SAS
启动的时间
最新创建的数据集名字
最新创建的数据集两部分名字
值
如
04AUG97
如
Monday
如
11:18
如
如
STUDY
SURVEY
上海财经大学经济信息管理系
IS/SHUFE
Created by zxdeng@
Page 2 of
6
SAS
系统和数据分析
电子商务系列
SYSVER
SYSSCP
使用
SAS
软件的版本
返回用户主机系统的缩写
如
6.12
如
WIN
例如,我们修改上面的程序,增加一个小标题,在小标题中引用自动宏变量,程序如下:
%Let
dsname=survey
;
%Let
start=?01jan79?d
;
%Let
end=
?31dec80?d
;
%Let
analyst=
;
Proc print
data=&dsname
;
Var
name
sex
bdate
income
;
Where
&start
;
Format
bdate date7.
;
Title
“Display of Data Set
&dsname”
Title
2
“&systime &sysday , &sysdate by
&analyst”
;
Run
三
.
p>
创
建
一
个
宏
宏是一个被存储的文本,用一个名字识别它
。最简单的宏就像一个宏变量一样工作,但
复杂的宏可以包括分支和循环等结构,能实现
许多宏变量不能实现的功能。
1
宏的定义和调用
宏定义的一般形式如下:
%MACRO
宏名字(参数宏变量)
;
宏实体
;
%MEND
宏名字
;
%MA
CRO
语句是每一个宏的开始,同时必须给出这个宏的名字。宏实体可为任一个文
本,
SAS
语句或
S
AS
步,宏变量、函数和这些实体的组合。
%MEND
语句必须围住每个宏并
表示宏结束。参数宏变量是一些将要传递给宏调用
的宏变量,不同参数宏变量之间用逗号隔
开。
SAS
程序中可以包括任意多个宏,且在程序中可以多次调用一个宏。在
SAS
中引用宏调
用的形式如下:
%
宏名字(参数值)
;
p>
例如,我们定义了一个简单通用的宏程序
INVOKE
,它有两个参数宏变量
procname
和
上海财经大学经济信息管理系
IS/SHUFE
Created by zxdeng@
Page 3 of
6
bozo-瓯剧
bozo-瓯剧
bozo-瓯剧
bozo-瓯剧
bozo-瓯剧
bozo-瓯剧
bozo-瓯剧
bozo-瓯剧
-
上一篇:too和enough的用法及区别
下一篇:德语