楼主: 84562
2035 7

[问答] 累加问题,求高手指教,感激不尽!!!! [推广有奖]

  • 0关注
  • 0粉丝

已卖:32份资源

本科生

27%

还不是VIP/贵宾

-

威望
0
论坛币
29 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1303 点
帖子
44
精华
0
在线时间
94 小时
注册时间
2011-1-16
最后登录
2021-5-23

楼主
84562 发表于 2014-7-4 02:06:45 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
请问有如何求出每个日期对上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
二维码

扫码加我 拉你入群

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

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

关键词:感激不尽 求高手 proc sql Distinct Create 如何

沙发
jingju11 发表于 2014-7-4 12:59:00
我没有仔细研究。两点建议:
()**2
INTCK(,,,'C').
京剧
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
84562 + 1 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

藤椅
pobel 在职认证  发表于 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开始?

板凳
84562 发表于 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开始

报纸
pobel 在职认证  发表于 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平方的累加”相冲突了。
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
84562 + 1 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

地板
bbear 发表于 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;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
84562 + 1 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

7
yongyitian 发表于 2014-7-4 23:59:22
这个问题需要用 intnx 函数创建一个起始日期变量 (date_start).
并修改 proc sql; 的 where statement.

关键是如何确定月末日期所对应的起始日期。

下面的code将每个月末所对应的起始日期定义为3个月前的第一天。 
如2月28日对应的起始日期为12月1日。

如改用其他方法定义,可以修改 if 语句。

data test1;
set test;
   date_start = intnx('month', date, -3, 'sameday') + 1;
   if date = intnx('month', date, 0, 'E')
     then date_start = intnx('month', date, -3, 'E') + 1;
   format date date_start yymmdd10.;
run;

proc sql;
   create table result1 as
    select distinct a.id, a.date, a.price, sum((b.price)**2)  as cum_return
    from test1 as a, test1 as b
    where a.id=b.id and  b.date_start <= b.date <= a.date
    group by a.id, a.date;
quit;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
84562 + 1 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

8
jingju11 发表于 2014-7-5 08:20:33
pobel 发表于 2014-7-4 14:21
个人认为楼主首先要确定的还是怎么定义这‘3个月’

如果2001/2/27对应的是从2000/11/30开始
非常同意如何定义3-month很重要。忽略笔误(11-31),根据作者的需要,ANNIVERSARY-LIKE的定义比较符合。我也对此作了简要的总结。并且提出在数据步里的解决方案。
京剧

http://blog.sina.com.cn/s/blog_a3a926360102uwmv.html
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
84562 + 1 + 1 + 1 分析的有道理
pobel + 3 + 3 + 3 京剧大哥好认真!值得我们学习

总评分: 学术水平 + 4  热心指数 + 4  信用等级 + 4   查看全部评分

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-22 10:05