全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2153 8
2010-12-08
4个data set:
data A :  code       date           ratio
             600000  2005-01-01  0.033
             600000  2005-01-03  0.765
             ............
data A 包括所有股票几年(2005-2008)的数据

data B  是部分股票在上述几年当中的上市的日期, 要求 在data A中删除 data B中i_ date开始的20个交易日的数据
data B : code   i_date
             600004   2005-07-03
             600008   2005-09-28
              。。。。。。。。。。

请教如何做
da
然后有data C 表示在05-08几年特别处理开始的时间
data C: code  s_date
            600009  2005-06-18

data D表示在05-08年特别处理结束的时间
data D : code d_date

要求在数据集 data A 中删除那些出现在data C中开始及以后的数据,若data D中出现
相应的结束的时间, 那么删除到此为止;如果data d中没有出现相应的结束时间, 则
将data A 中 从data C中显示的开始时间后相应的code的数据全部删除
二维码

扫码加我 拉你入群

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

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

全部回复
2010-12-8 21:38:26
用SAS sql解决最方便啦
二维码

扫码加我 拉你入群

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

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

2010-12-9 22:29:37
复制代码
1# qiaqiao
二维码

扫码加我 拉你入群

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

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

2010-12-11 20:32:26
谢谢楼上同学的帮助。
现在有个问题, 可能有些stock特别处理了2次, 开始时和结束时 在我考虑的区间有2个, 用
proc sql;
create table out as
   select a.*,i_date,s_date,d_date
   from a left join b on a.code=b.code
          left join c on c.code=a.code
          left join d on d.code=a.code
;quit;

会对同一只stock  四次匹配, 假设 600009 在2005-06-09,和2007-10-05特别处理开始, 在 2006-06-09和2008-10-08特别处理结束, 所以我应该删除05-06-9——06-06-09 和07-10-05——08-10-08的区间, 但是sql把 所有的可能匹配都列出来,也就是可能把05-06-09——08-10-08的数据也删除了。
二维码

扫码加我 拉你入群

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

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

2010-12-11 21:43:00
在原数据情况不是太明了的情况下
我的建议是
1 c和d分别记录了一支股票的事件起始日和结束日,并且会有一支股票多次事件的话,应该会有对应事件的标记或者是默认的事件准则(比如对于同一支股票,早开始的事件,对应的结束日也较早),否则就像楼主4楼所说的那样,由于无法识别事件日期对应的事件而造成对所有事件始末日作笛卡儿积。对此我的建议是先将c和d合并,并且在此过程中明确事件的始末日,对于终止日缺失的事件,可以用2099-12-31之类的常量替代,以满足后面楼主的要求。
2 对于删除20个交易日的问题。如果之前a表是股票到交易日的全量,那么直接控制记录数就可以了,如果不是全量的话,那么可能需要一张到股票的全量交易日表,以免发生由于数据缺失而导致多删除20交易日之后的数据。

我发现打字要比打代码累,希望对楼主有帮助,思路明确的话3楼的代码足以借鉴,我就偷下懒,不打了,呵呵
二维码

扫码加我 拉你入群

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

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

2010-12-11 22:35:12
谢谢楼上教授细心指导哈, 思路很有帮助, 偷懒 够我想半天:)
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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