SAS讲义-第四课
- 格式:doc
- 大小:42.50 KB
- 文档页数:4
SAS讲义-第四课
一、data语句
例1 规定要创建的SAS数据集。
data; /*系统自动规定数据集名datan * /
data a; /*创建临时数据集a */
data ResDat .a; /*创建永久数据集resdat.a */
data data1 data2; /*创建两个临时数据集data1和data2 */
data _null_; /*特殊名,不创建SAS数据集,用于输出*/
例2 数据集选项举例。
data new (drop=var1); /*去掉数据集new中变量var1*/ data new (keep=_numeric_); /*保留数据集new中所有数值变量*/ data new (label=’股本变动历史’);/*规定数据集new标签名为”股本变动历史”*/
data new (rename=(var1=u var2=v)); /*将数据集new中变量var1和var2更名为u和v*/
例3 观测子集的形成。
data year1998 year1999 year2000;
set ResDat.stk000001 ;
if year (date)=1998 then output year1998; /* year为函数名*/
else if year (date)=1999 then output year1999;
else if year (date)=2000 then output year2000;
run;
例中,根据条件产生三个观测子集,名字分别为year1998, year1999和year2000。
例4 变量子集的形成。
data open (keep=date oppr) close (keep=date clpr);
set resdat.stk000001;
run;
二、set语句
Set语句从一个或多个数据集中读取观测值并实现纵向合并。每一个set语句被执行时,SAS就会读一个观测到PDV中。
Set语句的语法格式:
set+数据集+(数据集选项)+选项;
(1)数据集选项
keep=变量指定的变量进入PDV
drop=变量指定的变量不进入PDV
rename=表达式对指定的变量在PDV更换变量名
where=表达式执行PDV之前满足表达式
IN=变量创建一个标识变量,如果当前观测属于数据集,
标识为1,否则为0
firstobs=常数如常数=3,表示从第三个观测读数据集
obs=常数如常数=10,表示最后一个观测是第十个观测
(2)选项
Nobs=变量把set语句后所有数据集的总观测数赋给变量Point=变量观测序号对应的数据指针,以控制读入的观测序号End=变量数据集文件结束的标志,结束为1,否则为0
三、set例题
例5 keep=选项的运用。
data a;
set sashelp.class(keep=name sex);
run;
等价于:
data a (keep=name sex);
set sashelp.class;
run;
例6 rename=选项运用。
data a;
set sashelp.class(keep=name sex rename=(name=name_new sex=sex_new)); run;
例7 where表达式应用。
data a;
set sashelp.class(keep=sex where=(sex=’M’));
run;
例8 IN=选项应用。
data one;
input x y$ @@;
cards;
1 a
2 b
3 c
;
data two;
input x z$ @@;
cards;
4 d
5 e
;
data in1;
set one (in=ina) two(in=inb);
if ina=1 then flag=1;else flag=0;
run;
例9 nobs=应用。
data a(keep=total);
set sashelp.class nobs=total_obs;
total=total_obs;
output;
stop;
run;
例10 point=选项应用1;取指定的一条数据。
data a;
set sashelp.class point=n;
output;
stop;
run;
例11 point=选项应用2:取指定的多条观测。
data a;
do n=3,15,4,19;
set sashelp.class point=n;
output;
end;
stop;
run;
注意点:使用选项point=时,经常要用stop语句终止data步的执行。因为使用set语句时,指针只有在遇到数据集的最后一条观测才会停止执行,而这里选择读入的最后一条观测一般情况下并不是数据集的最后一条观测,所以需要专门用stop语句停止指针执行,否则陷入死循环。
例12 nobs=和point=综合应用:快速取得最后一条观测。
data a;
set sashelp.class nobs=last point=last;
output;
stop;
run;
注意点:point=和nobs=是相互独立的,在任何一个data步中,nobs=总是在PDV之前执行,而point=总是在PDV之后执行。
例13 end=选项应用,对于上题,可以为:
data a;
set sashelp.class end=obs_last;
if obs_last=1;
run;
大家思考,例12与例13哪个效率高?
例14 _N_的使用。
data d1 d2;
set sashelp.class;
if _n_ le 10 then output d1; /*_n_表示当前数据指针指向的观测数*/
else output d2;
run;
例15 理解双指针原理。
data a;
input x $ @@;
cards;
a1 a2 a3
;
run;