全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
10609 10
2016-08-05
比如:我想以id分组,计算income的和,以下为此写的一段程序,大家帮忙看看有什么问题吗?,date set new_sample 并没有出来理想的结果。先谢谢大家了!
data sample;                                                                                                                           
input ID$ type income @@;                                                                                                               
cards;                                                                                                                                 
1 1 200 1 2 300 1 3 100 2 1 200 2 3 100 2 4 100                                                                                         
;                                                                                                                                       
run;                                                                                                                                    
data new_sample;                                                                                                                        
set sample;                                                                                                                             
by id;                                                                                                                                 
retain new_income;                                                                                                                     
if first.id then do;                                                                                                                    
new_income=0;                                                                                                                           
new_income+income;                                                                                                                     
if last.id then out new_sample;                                                                                                         
run;  


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2016-8-5 19:30:18
我感觉这样写比较好,你自己再结合程序慢慢体会一下:

data new_sample;                                                                                                                        
set sample;                                                                                                                             
by id;                                                                                                                                 
if first.id then new_income=0;                                                                                                                           
new_income+income;  
if last.id;     
keep id new_income;
run;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-8-5 19:51:23
在你的程序上略微改动如下:
复制代码
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-8-5 20:52:33
老师,我这个语句:  if last.id then out new_sample;  有问题吗?因为当改为  :if last.id;run; 后就能跑出结果了;
其实自己本来还想借此学习一下retain语句的,为什么这里没有retain new_income 也照样跑出正确的结果,我觉得如果没有了retain 那么的jisua计算的不是累加id的income之和吗?难道是因为有了run语句,所以PDV中各个变量又被赋予缺失值?                                                                                                                                                                                                        
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-8-5 21:02:11
wwang111 发表于 2016-8-5 19:30
我感觉这样写比较好,你自己再结合程序慢慢体会一下:

data new_sample;                               ...
老师,我这个语句:  if last.id then out new_sample;  有问题吗?因为当改为  :if last.id;run; 后就能跑出结果了;
其实自己本来还想借此学习一下retain语句的,为什么这里没有retain new_income 也照样跑出正确的结果,我觉得如果没有了retain 那么的jisua计算的不是累加id的income之和吗?难道是因为有了run语句,所以PDV中各个变量又被赋予缺失值?  
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-8-5 21:17:51
if last.id then out new_sample; 应该是 if last.id then output new_sample; 因为你的数据集名字本身就是new_sample,所以不加output也能输出名字是new_sample的数据集;

new_income+income; 这是 sum statement,本身就有retain的功能,跟run没关系,run只是这条记录执行完毕,回到data开始下一条记录的执行的一个标志。

这样写可以体现一下retain的作用,这时候new_income=new_income+income; 就是一个普通的算式,而不是sum statement了,:
data new_sample;                                                                                                                        
set sample;                                                                                                                             
by id;
retain new_income;
if first.id then new_income=income;                                                                                                                           
else new_income=new_income+income;  
if last.id;     
keep id new_income;
run;

附件列表

sum statement.pdf

大小:147.03 KB

 马上下载

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群