SAS中文论坛

标题: 如何合并观察值的数据? [打印本页]

作者: shiyiming    时间: 2008-7-8 14:31
标题: 如何合并观察值的数据?
数据格式如下:
姓名    收入      支出
张三    1000           200
张三    2000           300
李四    4000           600

问题:如何用sas计算出每个人的总收入和总支出?即得到下述结果:

姓名    收入      支出
张三    3000           500
李四    4000           600
作者: shiyiming    时间: 2008-7-8 14:48
标题: Re: 如何合并观察值的数据?
data shouru1;
input name $ 1-5 s z;
cards;
张三 1000 200
张三 2000 300
李四 4000 600
;
run;
proc sql;
create table end as
select name , sum(s) as shouru,
sum(z) as zhichu
from shouru1
group by name;
quit;
作者: shiyiming    时间: 2008-7-8 17:22
标题: Re: 如何合并观察值的数据?
data shouru1;
input name $ 1-5 s z;
cards;
张三 1000 200
张三 2000 300
李四 4000 600
;
run;
proc sort data=shouru1;
by name;
data result;
set shouru1;
by name;
if first.name then do;
shouru=0;
zhichu=0;
end;
shouru+s;
zhichu+z;
if last.name then output;
run;
作者: shiyiming    时间: 2008-7-9 11:02
标题: Re: 如何合并观察值的数据?
谢谢!很受益。
作者: shiyiming    时间: 2008-7-10 10:05
标题: Re: 如何合并观察值的数据?
写的都不错,xgghxkhuang 的方法利用了SQL的分组合并,而jimmy782的方法则是用了数据之间的运算。
相信从执行效率上来看jimmy782的方法要比前者要快。但从使用上还是xgghxkhuang 的方法适用。
data result;
set shouru1;
by name;
if first.name then do;
shouru=0;
zhichu=0;
end;
shouru+s;
zhichu+z;
if last.name then output;
run;

[b:1b0v42is]jimmy782[/b:1b0v42is]能否讲讲你方法中first.name 和last.name的含义,我是新学SAS。
作者: shiyiming    时间: 2008-7-10 15:17
标题: Re: 如何合并观察值的数据?
哦,我是不习惯写SQL语句,因为客户要求都是写sas语句,对于first 和 last,是根据你在by 后面跟的变量来说的,就是将变量分组,first.name 就是name 这组的第一条记录,last.name 就是name这组的最后一条记录,最白的意思就是同一XX下的什么什么,当然你在用这个之前要按by 后面的变量排序,如果是spds库就可以直接在数据集后面加(bysort=yes)选项。




欢迎光临 SAS中文论坛 (https://mysas.net/forum/) Powered by Discuz! X3.2