全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1746 2
2017-02-02
悬赏 300 个论坛币 未解决
数据样本大致就是附件图片的样子,第三行的日期是每支股票事件发生日披露的日期,每列是股票的日收益率,我想截取每支股票事件发生日前后的150个交易日前后的日收益率,请问各位大神如何用sas实现?
1486007491(1).png

原图尺寸 33.19 KB

数据样本

数据样本

二维码

扫码加我 拉你入群

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

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

全部回复
2017-2-3 11:41:52
简单看了下,这里每只股票的日收益率应该是完全覆盖所有交易日且连续的。只需要
1. 在每只股票上定位到披露日所在行数i,数据应该已经按交易日升序排列好了
2. 再保留观测[i-150,i+150]共301条
3. 再将数据转置重命名成方便处理的格式,每只股票一条观测
4. 并且将多只股票合并成完整数据集
这样应该就OK了
二维码

扫码加我 拉你入群

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

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

2017-2-3 22:42:02
/*建立数据集*/
data test;
input date : $ 20. stk1 : $ 20.;
cards;
. 000791.SZ
. 甘肃电投
. 2010-7-1
. .
2010-6-21        -9.86
2010-6-22        -9.85
2010-6-23        -9.84
2010-6-24        -9.83
2010-6-25        -9.82
2010-6-28        -9.81
2010-6-29        -9.8
2010-6-30        -9.79
2010-7-1        -9.78
2010-7-2        -9.77
2010-7-5        -9.76
2010-7-6        -9.75
2010-7-7        -9.74
2010-7-8        -9.73
2010-7-9        -9.72
2010-7-12        -9.71
2010-7-13        -9.7
;
run;

/*事件发生日披露的日期赋值给宏变量stkdt1*/
/*并且把该日顺序号赋值给宏变量n*/
data test;
set test;
n=_n_;
if n=3 then
        call symput('stkdt1',stk1);
if input(date,yymmdd10.)=input("&stkdt1.",yymmdd10.) then
        call symput('n',n);
run;

/*根据宏变量n选择所需时间范围的数据*/
data test1;
set test;
where n<=4 or &n.-5<=n<=&n.+5;
run;
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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