1. 首页
  2. 自学中心
  3. 软件
  4. SAS

SET MERGE UPDATE MODIFY语句对比

来自 http://blog.sina.com.cn/s/blog_6c1c13fc0100lyi7.html

·SET语句从一个或多个已存在的SAS数据集中读取观测值,并将这些观测组合在一个数据集中;

·MERGE语句将多个数据集中的观测合并为新数据集中的一个观测(SAS系统合并观测的方式依赖于BY语句的使用);

·UPDATE语句通过修改数据集来修改或更新变量,也可以添加新变量;

·MODIFY语句扩充DATA步功能,它可以替代、删除或添加观测到一个已存在的SAS数据集上。MODIFY语句是在没有备份的情况下处理SAS数据集,因此使用该语句可以节省磁盘空间。但该语句不能修改数据集的描述部分,如添加变量。

一)连续两个SET语句。

 data one;
input x y $;
cards;
1 Groucho
3 Harpo
5 Kart
;
run;
data two;
input x z $;
cards;
2 Chico
4 Zeppo
;
run;
data three;
set one;
set two;
run;

数据集three为

6c1c13fcg7508d593fa97690

    以上若改为data three;                      
              merge one two;
             run;      则数据集three为
6c1c13fcg9258496cba1b690  

二)MERGE语句。

1)一对一合并(不需要BY语句)。

data a;
merge resdat.class(keep=name age) resdat.stk000001(keep=date clpr);
run;                                                                                              

6c1c13fcg9258c32662ce690

2)匹配合并(必须有BY语句)。

  data a;
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;

6c1c13fcg9258e2f37c3e690

 

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; 

6c1c13fcg9258f7da8a50690

三)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为:

001ykqtizy6fbxc1gkod4690

四).MODIFY语句是在没有备份的情况下处理SAS数据集,因此使用该语句可以节省磁盘空间。

·使用MERGE、SET或UPDATE语句时,SAS创建了新的数据集,使用MODIFY语句时,SAS只是在原来的数据集中进行修改,所以不能改变原数据集的描述符;

·在MODIFY语句中使用BY语句时,主数据集合修改数据集的BY变量不需要事先排序或索引,而且主数据集合修改数据集的BY变量都可以有重复值。

 data stock(index=(partno));
input partno$ desc$ instock @17 recdate date7. @25 price;
format recdate date7.;
datalines;
k89r seal   34  27jul95 245.00
m4j7 sander 98  20jun95 45.88
lk43 filter 121 19may96 10.99
mn21 brace 43   10aug96 27.87
bc85 clamp 80   16aug96 9.55
ncf3 vavle 198  20mar96 24.5
kj66 culter 6   18jun96 19.77
;
run;

1)修改所有观测。

data stock;
modify stock;
recdate=today();
run;

6c1c13fcg92683395e7f7690

注:不可将语句改为:

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;
6c1c13fcg926845eea7ad690

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;

6c1c13fcg926857d594b9690

原创文章,作者:xsmile,如若转载,请注明出处:http://www.17bigdata.com/set-merge-update-modify%e8%af%ad%e5%8f%a5%e5%af%b9%e6%af%94/

联系我们

在线咨询:点击这里给我发消息

邮件:23683716@qq.com

跳至工具栏