全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
5676 13
2016-10-23
程序
data test;
input name$  time1 yymmdd10. score;
datalines;
a 2016-09-02 35
a 2015-02-17 90
b 2013-07-08 40
a 2016-08-05 89
b 2014-06-02 70
;
run;

proc sort data = test;
by name time;
run;
data test;
set test;
by name;
if first.name then sum = score;
else sum + score;
run;

这个程序能够实现对name相同的变量 score进行求和
我现在的问题是如何能够有条件的求和,比如加入时间的约束,name相同的观测中,只把距离第一个观测的时间小于一年的观测进行score求和 而不是像现在代码里那样所有都求和


二维码

扫码加我 拉你入群

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

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

全部回复
2016-10-23 09:37:34
我的思路是先创建满足条件的表格,再相加。
data test;
input name$  time yymmdd10. score;
datalines;
a 2016-09-02 35
a 2015-02-17 90
b 2013-07-08 40
a 2016-08-05 89
b 2014-06-02 70
;
run;
proc sort data = test;
by name time;
run;
data test1;
set test;
by name;
if first.name then output;
run;
proc sql noprint;
create table test2 as
select test.*
from test,test1
where  test.name=test1.name and test.time<test1.time+365;
quit;
proc sort data = test2;
by name time;
run;
data test2;
set test2;
by name;
if first.name then sum = score;
else sum + score;
run;
二维码

扫码加我 拉你入群

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

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

2016-10-23 10:04:46
else sum+score;
改成
else if time-first.time<=365 then sum+score;
试试看
二维码

扫码加我 拉你入群

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

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

2016-10-23 10:05:38
小白求大神解答
二维码

扫码加我 拉你入群

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

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

2016-10-23 10:06:00
一线天56 发表于 2016-10-23 09:37
我的思路是先创建满足条件的表格,再相加。
data test;
input name$  time yymmdd10. score;
X-power 未认证  发表于 1 秒前 |只看作者





大多数语句都能看得懂 感觉是个很好的思路 能稍微解释一下sql那块table语句吗 谢谢!
二维码

扫码加我 拉你入群

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

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

2016-10-23 10:07:08
l1i2n3i4n5g 发表于 2016-10-23 10:04
else sum+score;
改成
else if time-first.time
这个我试过 不行 因为是按照name sort的 所以first.name会显示未初始化 本来想这样的语句会最简单
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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