码迷,mamicode.com
首页 > 其他好文 > 详细

sas数据操作-3

时间:2014-06-22 23:13:55      阅读:394      评论:0      收藏:0      [点我收藏+]

标签:des   style   class   blog   code   color   

希望有疑问的朋友提出问题,大家一起学习进步,以后我也会多多的写自己的例子

 

update语句

UPDATE master-data-set<(data-set-options)> transaction-data-set<(data-set-options)>
<END=variable>
<UPDATEMODE= MISSINGCHECK | NOMISSINGCHECK>;
BY by-variable;

TIPS:

1:后面只能跟两个数据集,且一定要和by语句连用,这个by语句给出了主数据集和更新数据集共同变量的名字。

2:update语句中使用的数据集必须实现按照by语句制定的变量进行排序,或者已经有合适的索引

3:对更新数据集存在缺失值的处理通过开关选项UPDATEMODE实现

MISSINGCHECK:检查更新数据集,若有缺失值,则保留主数据及中相应的数据

NOMISSINGCHECK:不检查更新数据集,若有缺失值,则将主数据集中的相应数据更新为缺失值

4:update能做到的merge都能做到,除了对更新数据及缺失值的处理

 

modify语句

merge和update语句对数据集横向合并的主要功能只能体现在匹配访问上(by var;),但是对于非常庞大的数据集需要定期更新,但是每次更新的观测值对象都是动态的,这时候使用merge或update会消耗很多的资源,这时候可以通过modify高效的访问机制来实现。使用modify《系统会有两个pdv》

modify的四种格式

Form 1:
MODIFY master-data-set <(data-set-options)> transaction-data-set <(data-set-options)>
<NOBS=variable> <END=variable>
<UPDATEMODE=MISSINGCHECK | NOMISSINGCHECK>;
BY by-variable;
Form 2:
MODIFY master-data-set <(data-set-options)> KEY=index </ UNIQUE> <NOBS=variable>
<END=variable>;
Form 3:
MODIFY master-data-set <(data-set-options)> <NOBS=variable> POINT=variable;
Form 4:
MODIFY master-data-set <(data-set-options)> <NOBS=variable> <END=variable>;

例子:

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 valve 198  20mar96 24.50
KJ66 cutter 6   18jun96 19.77
UYN7 rod  211   09sep96 11.55
JD03 switch 383 09jan97 13.99
BV1E timer 26   03jan97 34.50
;
run;

/*直接改变所有的recdate变量观测值,可以不用任何更新数据集*/

data stock;
modify stock;
recdate=today();
run;
proc print data=stock noobs;
title ‘INVTY.STOCK‘;
run;

/*用更新数据集更新主数据集,使用匹配访问,更新数据集放在主数据集后面*/

data stock;
modify stock addinv;
by partno;
RECDATE=today();
INSTOCK=instock+nwstock;
if _iorc_=0 then replace;
run;
proc print data=stock noobs;
title ‘STOCK‘;
run;


data newp;
   input TOOL_OBS NEWP;
   datalines;
 1 251.00
 2 49.33
 3 12.32
 4 30.00
 5 15.00
 6 25.75
 7 22.00
 8 14.00
 9 14.32
10 35.00
;
/*通过观测序号来访问,先set数据集再进行改变*/

data stock;
set newp;
modify stock point=tool_obs nobs=max_obs;
price=newp;
recdate = today();
run;

/*通过索引进行访问,先set数据集再进行改变*/

data stock;
set addinv;
modify stock key=partno;
INSTOCK=instock+nwstock;
RECDATE=today();
if _iorc_=0 then replace;
run;
proc print data=stock noobs;
title ‘INVTY.STOCK‘;
run;

 /*对于更新数据集有重复值的情况*/
data newinv;
   input PARTNO $ NWSTOCK;
   datalines;
K89R 55
M4J7 21
M4J7 26
LK43 43
MN21 73
BC85 57
NCF3 90
KJ66 2
UYN7 108
JD03 55
BV1E 27
;
data stock;
   set newinv;
   modify invty.stock key=partno / unique;  /*使用unique则会对m4j7的值进行累加,不用就只会加第一个*/
   INSTOCK=instock+nwstock;
   RECDATE=today();
   if _iorc_=0 then replace;
run; 
proc print data=stock noobs;
   title ‘Results of Using the UNIQUE Option‘;
run;
 

 

 

 

sas数据操作-3,布布扣,bubuko.com

sas数据操作-3

标签:des   style   class   blog   code   color   

原文地址:http://www.cnblogs.com/yican/p/3799883.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!