来自 http://blog.sina.com.cn/s/blog_6c1c13fc0100lyi7.html
·SET语句从一个或多个已存在的SAS数据集中读取观测值,并将这些观测组合在一个数据集中;
·MERGE语句将多个数据集中的观测合并为新数据集中的一个观测(SAS系统合并观测的方式依赖于BY语句的使用);
·UPDATE语句通过修改数据集来修改或更新变量,也可以添加新变量;
·MODIFY语句扩充DATA步功能,它可以替代、删除或添加观测到一个已存在的SAS数据集上。MODIFY语句是在没有备份的情况下处理SAS数据集,因此使用该语句可以节省磁盘空间。但该语句不能修改数据集的描述部分,如添加变量。
一)连续两个SET语句。
data two;
input x z $;
cards;
2 Chico
4 Zeppo
;
run;
data three;
set one;
set two;
run;
数据集three为
二)MERGE语句。
1)一对一合并(不需要BY语句)。
data a;
merge resdat.class(keep=name age) resdat.stk000001(keep=date clpr);
run;
2)匹配合并(必须有BY语句)。
merge resdat.stk000001(keep=date clpr rename=(clpr=clpr000001))
resdat.stk000002(keep=date clpr rename=(clpr=clpr000002));
proc sort data=resdat.stk000001;
by date;
proc sort data=resdat.stk000002;
by date;
run;
3)选择股票代码为000001、200011、600601和900903的数据。
data stkcd;
input stkcd $6.;
cards;
00001
200011
600601
900903
;
data a;
merge resdat.iissulst stkcd(in=id);
by stkcd;
if id;
run;
三)UPDATE语句。
·UPDATE语句必须和BY语句一起使用,且BY语句应该紧跟在UPDATE语句后面;
·由BY语句指定的变量在主数据集中的观测值必须是唯一的。若有多个观测该变量的值相等,则UPDATE语句只更新的一个观测的值。
·当第二个数据集中有缺失数据时,若用MERGE语句,则主数据集中的相应数据自动更新为缺失。若用UPDATE语句,则可通过选项Updatemode=控制。
data master;
input id $ name $ age sasgrp $ height sex $;
cards;
9211 GU 20 Y 170 F
9212 YUAN 19 Y 165 F
9213 HU 16 N 163 F
;
data trans;
input id $ age sasgrp $ height;
cards;
9211 . N .
9212 . Y 168
;
data new;
update master trans;
by id;
run;
数据集new为:
四).MODIFY语句是在没有备份的情况下处理SAS数据集,因此使用该语句可以节省磁盘空间。
·使用MERGE、SET或UPDATE语句时,SAS创建了新的数据集,使用MODIFY语句时,SAS只是在原来的数据集中进行修改,所以不能改变原数据集的描述符;
·在MODIFY语句中使用BY语句时,主数据集合修改数据集的BY变量不需要事先排序或索引,而且主数据集合修改数据集的BY变量都可以有重复值。
input partno$ desc$ instock @17 recdate date7. @25 price;
format recdate date7.;
datalines;
k89r seal
m4j7 sander 98
lk43 filter 121 19may96 10.99
mn21 brace 43
bc85 clamp 80
ncf3 vavle 198
kj66 culter 6
;
run;
1)修改所有观测。
data stock;
modify stock;
recdate=today();
run;
注:不可将语句改为:
data a;
modify stock;
recdate=today();
run;
因为modify是在没有备份的情况下处理sas数据。
2)用修改数据及修改观测。
data addinv;
input partno$ nwstock;
datalines;
k89r 55
lk43 43
;
data stock;
modify stock addinv;
by partno;
recdate=today();
instock=instock+nwstock;
if _iorc_=0 then replace;
run;
3)通过索引修改数据集。
data stock;
set addinv;
modify stock key=partno;
instock=instock+nwstock;
if _iorc_=0 then replace;
run;
结果同上。
4)通过观测序号修改数据集。
data newp;
input obs newp;
datalines;
1 251.00
4 30.00
6 25.75
10 35.00
;
data stock;
set newp;
modify stock point=obs
nobs=max_obs;
if _error_=1 then do;
stop;
end;
price=newp;
run;