全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1979 7
2014-07-04
请问有如何求出每个日期对上3个月的平方累加?因为每个月的日数都不同,不知怎样去处理。
Table
IDdatenowhat I want

1

2000/11/1

2

由2000/8/2-2000/11/1 的no平方的累加

1

2000/11/2

3

由2000/8/3-2000/11/2 的no平方的累加

1

2000/11/31

4

由2000/9/1-2000/11/31 的no平方的累加

1

2001/2/1

3

由2000/11/2-2000/2/1 的no平方的累加

1

2001/2/2

6

由2000/11/3-2000/2/2 的no平方的累加

1

2001/2/28

7

由2000/12/1-2000/2/28 的no平方的累加

2

2005/11/1

2

由2005/8/2-2005/11/1 的no平方的累加

2

2005/11/2

3

由2005/8/3-2005/11/2 的no平方的累加

2

2005/11/31

4

由2005/9/1-2005/11/31 的no平方的累加

2

2006/2/1

3

由2005/11/2-2006/2/1 的no平方的累加

2

2006/2/2

6

由2005/11/3-2006/2/2 的no平方的累加

2

2006/2/28

7

由2005/12/1-2006/2/28 的no平方的累加

3

4





以下是我的代码,但很有问题。

proc sql;
create table result
as select distinct a.id, a.date, sum((b.no)^2)  as cum_return
from table (keep=id date) as a, table as b
where a.id=b.id and 0<=intck('month', b.date, a.date)<3
group by a.id, a.date;
quit;


求高手指教,不一定要用SQL
二维码

扫码加我 拉你入群

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

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

全部回复
2014-7-4 12:59:00
我没有仔细研究。两点建议:
()**2
INTCK(,,,'C').
京剧
二维码

扫码加我 拉你入群

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

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

2014-7-4 13:49:03
2001/2/1:  由2000/11/2-2000/2/1 的no平方的累加
2001/2/2:  由2000/11/3-2000/2/2 的no平方的累加
…                       
2001/2/28: 由2000/12/1-2000/2/28 的no平方的累加

那2001/2/27是从2000/11/28开始,还是2000/11/30开始?
二维码

扫码加我 拉你入群

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

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

2014-7-4 14:01:05
pobel 发表于 2014-7-4 13:49
2001/2/1:  由2000/11/2-2000/2/1 的no平方的累加
2001/2/2:  由2000/11/3-2000/2/2 的no平方的累加
…                 ...
由2000/11/30开始
二维码

扫码加我 拉你入群

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

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

2014-7-4 14:21:06
84562 发表于 2014-7-4 14:01
由2000/11/30开始
个人认为楼主首先要确定的还是怎么定义这‘3个月’

如果2001/2/27对应的是从2000/11/30开始
那类似的:
2001/2/26----2000/11/29
2001/2/25----2000/11/28
2001/2/24----2000/11/27
... ...
2001/2/2----2000/11/5
这就和“2001/2/2:  由2000/11/3-2000/2/2 的no平方的累加”相冲突了。
二维码

扫码加我 拉你入群

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

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

2014-7-4 23:25:43
data d;
input id date no   ;
cards;
1 20000229 1
1 20000528 1
1 20000529 1
1 20000630 1
1 20000701 1
1 20000702 2
1 20000704 1
1 20000708 2
1 20000801 1
1 20000802 2
1 20000901 1
1 20001001 2
1 20001101 4
1 20001102 4
;
run;

* 每一笔先造出 begin date-> d_last3 ;
data d1;
set d;
d_date= MDY( mod(int(date/100),100) , mod(date,100) , int(date/10000) );
monthA=month(d_date);
dayA=day(d_date);
yearA=year(d_date);
d_last3=intnx('month',d_date,-3)+dayA;
run;

* 在日期范围内的做加总 ;
proc sql;
create table result
as select distinct a.id, a.date, sum((b.no)*b.no) as cum_return
from d1 as a, d1 as b
where a.id=b.id and b.d_date>=a.d_last3 and b.d_date<=a.d_date
group by a.id, a.date;
quit;
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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