楼主: O(∩_∩)O~!
3734 4

多个时间间隔内分组累计函数的计算 [推广有奖]

  • 0关注
  • 1粉丝

已卖:8份资源

讲师

18%

还不是VIP/贵宾

-

威望
0
论坛币
3994 个
通用积分
13.4290
学术水平
6 点
热心指数
16 点
信用等级
5 点
经验
8886 点
帖子
276
精华
0
在线时间
333 小时
注册时间
2010-8-5
最后登录
2022-8-16

楼主
O(∩_∩)O~! 发表于 2010-11-2 09:26:19 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我有如下的一个数据(以下是一部分样本,并且同样的数据集有多个),各个变量含义依次是股票代码、交易日期、某个收益值、基准日期(记为第0天)、基准日前两天(记第-2天)、基准日后两天(记第2天)、后边的依次是后4、6、8、10天(4、6、8、10),现在需要计算不同股票在以下时间区间内【-2,2】、【0,2】、【0,4】,【0,6】,【0,8】,【0,10】跟ar有关的一个函数值,请教该如何写程序?或者请高手提示下该用什么?循环和宏吗?
stck Trddt ar date pre2_date aft2_date aft4_date aft6_date aft8_date aft10_date
000009 2008-03-06 0.02442681 2008-03-08 2008-03-06 2008-03-10 2008-03-12 2008-03-14 2008-03-16 2008-03-18
000009 2008-03-07 -0.020126482 2008-03-08 2008-03-06 2008-03-10 2008-03-12 2008-03-14 2008-03-16 2008-03-18
000009 2008-03-10 -0.021732947 2008-03-08 2008-03-06 2008-03-10 2008-03-12 2008-03-14 2008-03-16 2008-03-18
000026 2008-04-07 -0.035743757 2008-04-09 2008-04-07 2008-04-11 2008-04-13 2008-04-15 2008-04-17 2008-04-19
000026 2008-04-08 -0.021548374 2008-04-09 2008-04-07 2008-04-11 2008-04-13 2008-04-15 2008-04-17 2008-04-19
000026 2008-04-09 0.021731954 2008-04-09 2008-04-07 2008-04-11 2008-04-13 2008-04-15 2008-04-17 2008-04-19
000026 2008-04-10 -0.031038653 2008-04-09 2008-04-07 2008-04-11 2008-04-13 2008-04-15 2008-04-17 2008-04-19
000026 2008-04-11 0.000708965 2008-04-09 2008-04-07 2008-04-11 2008-04-13 2008-04-15 2008-04-17 2008-04-19
000026 2008-04-14 -0.027964365 2008-04-09 2008-04-07 2008-04-11 2008-04-13 2008-04-15 2008-04-17 2008-04-19
000026 2008-04-15 -0.048091734 2008-04-09 2008-04-07 2008-04-11 2008-04-13 2008-04-15 2008-04-17 2008-04-19
000026 2008-04-16 0.025881512 2008-04-09 2008-04-07 2008-04-11 2008-04-13 2008-04-15 2008-04-17 2008-04-19
000026 2008-04-17 -0.007311003 2008-04-09 2008-04-07 2008-04-11 2008-04-13 2008-04-15 2008-04-17 2008-04-19
000026 2008-04-18 -0.022120984 2008-04-09 2008-04-07 2008-04-11 2008-04-13 2008-04-15 2008-04-17 2008-04-19
二维码

扫码加我 拉你入群

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

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

关键词:时间间隔 date 股票代码 ATE 基准日 函数 分组 时间间隔

回帖推荐

soporaeternus 发表于2楼  查看完整内容

抛个砖,用sum做的测试,其他聚合函数的话要稍作改动

本帖被以下文库推荐

沙发
soporaeternus 发表于 2010-11-2 10:04:36
  1. data a;
  2.         input
  3.         stck:$6. Trddt:yymmdd10. ar date:yymmdd10. pre2_date:yymmdd10. aft2_date:yymmdd10. aft4_date:yymmdd10. aft6_date:yymmdd10. aft8_date:yymmdd10. aft10_date:yymmdd10.;
  4.         format Trddt date pre2_date aft2_date aft4_date aft6_date aft8_date aft10_date yymmdd10.;
  5.         datalines;
  6. 000009 2008-03-06 1 2008-03-08 2008-03-06 2008-03-10 2008-03-12 2008-03-14 2008-03-16 2008-03-18
  7. 000009 2008-03-07 2 2008-03-08 2008-03-06 2008-03-10 2008-03-12 2008-03-14 2008-03-16 2008-03-18
  8. 000009 2008-03-10 3 2008-03-08 2008-03-06 2008-03-10 2008-03-12 2008-03-14 2008-03-16 2008-03-18
  9. 000026 2008-04-07 4 2008-04-09 2008-04-07 2008-04-11 2008-04-13 2008-04-15 2008-04-17 2008-04-19
  10. 000026 2008-04-08 5 2008-04-09 2008-04-07 2008-04-11 2008-04-13 2008-04-15 2008-04-17 2008-04-19
  11. 000026 2008-04-09 6 2008-04-09 2008-04-07 2008-04-11 2008-04-13 2008-04-15 2008-04-17 2008-04-19
  12. 000026 2008-04-10 7 2008-04-09 2008-04-07 2008-04-11 2008-04-13 2008-04-15 2008-04-17 2008-04-19
  13. 000026 2008-04-11 8 2008-04-09 2008-04-07 2008-04-11 2008-04-13 2008-04-15 2008-04-17 2008-04-19
  14. 000026 2008-04-14 9 2008-04-09 2008-04-07 2008-04-11 2008-04-13 2008-04-15 2008-04-17 2008-04-19
  15. 000026 2008-04-15 10 2008-04-09 2008-04-07 2008-04-11 2008-04-13 2008-04-15 2008-04-17 2008-04-19
  16. 000026 2008-04-16 11 2008-04-09 2008-04-07 2008-04-11 2008-04-13 2008-04-15 2008-04-17 2008-04-19
  17. 000026 2008-04-17 12 2008-04-09 2008-04-07 2008-04-11 2008-04-13 2008-04-15 2008-04-17 2008-04-19
  18. 000026 2008-04-18 13 2008-04-09 2008-04-07 2008-04-11 2008-04-13 2008-04-15 2008-04-17 2008-04-19
  19. ;
  20. run;

  21. %MACRO Cal(min,max);
  22.         %if &min<0 %then %let var_min=pre%eval(-&min)_date;
  23.         %else %if &min=0 %then %let var_min=date;
  24.         %else %let var_min=aft&min._date;

  25.         %if &max<0 %then %let var_max=pre%eval(-&max)_date;
  26.         %else %if &max=0 %then %let var_max=date;
  27.         %else %let var_max=aft&max._date;

  28.         %put &var_min &var_max;

  29.         ,sum(case when Trddt>=&var_min and Trddt<=&var_max then ar else 0 end) as %scan(&var_min,1,_)_%scan(&var_max,1,_)
  30. %MEND Cal;



  31. proc sql;
  32.         create table b as
  33.                 select
  34.                         stck
  35.                         ,date
  36.                         %Cal(-2,2)
  37.                         %Cal(0,2)
  38.                         %Cal(0,4)
  39.                         %Cal(0,6)
  40.                         %Cal(0,8)
  41.                         %Cal(0,10)
  42.                 from a
  43.                 group by
  44.                         stck
  45.                         ,date
  46.         ;
  47. quit;
复制代码
抛个砖,用sum做的测试,其他聚合函数的话要稍作改动
Let them be hard, but never unjust

藤椅
O(∩_∩)O~! 发表于 2010-11-2 10:41:18
用循环、IF 语句能不能做啊?

没用过宏,学的话时间有点紧。。。

板凳
xichongwanglei 在职认证  发表于 2012-4-16 09:40:15
学习了,高效的编程

报纸
456852 发表于 2012-4-16 14:12:50
这个宏的确赞,不过核心思想是:挑选符合条件的观测。
我做的话,会些类似如下的code:
data b;set a;
if abs(intck('day',trddt,date))<=2 then _minus2_to_2=1;else _minus2_to_2=0;
if intck('day',trddt,date)>=0 and intck('day',trddt,date)<=2 then _0_to_2=1;else _0_to_2=0;
if intck('day',trddt,date)>=0 and intck('day',trddt,date)<=4 then _0_to_4=1;else _0_to_4=0;
if intck('day',trddt,date)>=0 and intck('day',trddt,date)<=6 then _0_to_6=1;else _0_to_6=0;
if intck('day',trddt,date)>=0 and intck('day',trddt,date)<=8 then _0_to_8=1;else _0_to_8=0;
if intck('day',trddt,date)>=0 and intck('day',trddt,date)<=10 then _0_to_10=1;else _0_to_10=0;
run;
然后再用sql汇总。

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

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