全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
4802 7
2010-12-06
各位高手:
       我有如下数据,想实现分时间组对p求和,该怎么办呢?
time              P1        P2       P3        
1                 11         12       15
1                 23         11       17
.2                 323       0         18
2                123        89        90
3                762         1        18
想对每一列对按照时间分组求和,就是分别求出P1,P2,P3下time=1是对应数的和,time=2是等等

先谢谢各位大侠
二维码

扫码加我 拉你入群

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

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

全部回复
2010-12-6 16:00:23
主要有两种方法做,一个是有proc means, 主要是在data step的时候生成一个sum作为row的总和,然后用proc means找和。另外一个是用data step。视乎个人喜好。个人认为proc means比较直接!
data xxx;
input time $   P1 P2  P3;
sum=sum(of p1--p3);
cards;
1                 11         12       15
1                 23         11       17
2                 323       0         18
2                123        89        90
3                762         1        18
;
run;
proc sort data=xxx;
by time;
run;
proc means data=xxx sum maxdec=0;
var sum;
class time;
ways 1;
run;
data yyy;
set xxx;
by time;
sum=sum(of p1--p3);
if first.time then do;
total=0;
end;
total+sum;
if last.time then output;
keep time total;
run;
二维码

扫码加我 拉你入群

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

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

2010-12-6 16:23:18
2# Isscaliu
谢谢兄弟

你那个好像是求time等于一时:同一行p1+p2+p3


我是想求time=1时:p1下 所有数的和,P2下所有数的和以及P3下所有数的和
依次time=2时等等
这样改怎么求啊? 希望大侠指教
先谢谢了
二维码

扫码加我 拉你入群

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

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

2010-12-6 17:00:18
复制代码
二维码

扫码加我 拉你入群

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

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

2010-12-6 18:13:53
那更加容易,直接proc means就可以了连data step的sum都可以,兄弟!或者像楼上的用proc sql!
proc means data=xxx sum maxdec=0;
var p1--p3;
by time;
run;
二维码

扫码加我 拉你入群

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

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

2010-12-6 19:51:33
呵呵,还是喜欢用soporaeternus 的SQL
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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