累乘法计算事件收益率(SAS+STATA)
(2014-05-02 11:20:25)
标签:
sas数据处理体育 |
分类: 03SAS数据处理 |
累乘法计算事件收益率。
1.数据中间有缺失(我的办法是赋值为0,还有其他办法);
2.上市公司2千多家,如果计算所有公司的累乘(if set time interval:180/360days)计算耗用memory 较大,STATA不够用,电脑内存大应该可以克服这个问题,alternatively, 把数据分割后处理,最后合并。
参考:http://bbs.pinggu.org/thread-881526-1-1.html
code |
date |
1 |
20010102 |
1 |
20010103 |
1 |
20010105 |
1 |
20010506 |
2 |
20030201 |
2 |
20030206 |
2 |
20030406 |
上面的表格是事件数据
code |
date |
ret |
1 |
20010101 |
0.001 |
1 |
20010102 |
0.011 |
1 |
20010103 |
0.021 |
1 |
20010104 |
0.031 |
1 |
20010105 |
0.041 |
1 |
20010106 |
0.051 |
1 |
20010107 |
0.061 |
1 |
20010108 |
0.071 |
1 |
20010109 |
0.081 |
1 |
20010110 |
0.091 |
1 |
20010505 |
0.101 |
1 |
20010506 |
0.111 |
1 |
20010507 |
0.121 |
1 |
20010508 |
0.131 |
1 |
20010509 |
0.141 |
1 |
20010510 |
0.151 |
1 |
20010511 |
0.161 |
1 |
20010512 |
0.171 |
1 |
20010513 |
0.181 |
2 |
20030201 |
0.191 |
2 |
20030202 |
0.201 |
2 |
20030203 |
0.211 |
2 |
20030204 |
0.221 |
2 |
20030205 |
0.231 |
2 |
20030206 |
0.241 |
2 |
20030207 |
0.251 |
2 |
20030405 |
0.261 |
2 |
20030406 |
0.271 |
2 |
20030407 |
0.281 |
2 |
20030408 |
0.291 |
上面的表格是收益率数据
code |
date |
rrer(10) |
1 |
20010102 |
|
1 |
20010103 |
|
1 |
20010105 |
|
1 |
20010506 |
|
2 |
20030201 |
|
2 |
20030206 |
|
2 |
20030406 |
|
现在要计算上面的表格,也就是对每一个事件发生之后10日的累积股票收益率(累积乘法
方法计算)
注意,有的日子里有事件发生但是不是交易日,这样子的情况,需要将事件发生日期顺延到下一个交易日。
data a;
format date yymmdd10.;
datalines;
1 20010101
1 20010103
1 20010105
1 20010506
2 20030201
2 20030206
2 20030406
;
run;
data b;
datalines;
1 20010101 0.001
1 20010102 0.011
1 20010103 0.021
1 20010104 0.031
1 20010105 0.041
1 20010106 0.051
1 20010107 0.061
1 20010108 0.071
1 20010109 0.081
1 20010110 0.091
1 20010505 0.101
1 20010506 0.111
1 20010507 0.121
1 20010508 0.131
1 20010509 0.141
1 20010510 0.151
1 20010511 0.161
1 20010512 0.171
1 20010513 0.181
2 20030201 0.191
2 20030202 0.201
2 20030203 0.211
2 20030204 0.221
2 20030205 0.231
2 20030206 0.241
2 20030207 0.251
2 20030405 0.261
2 20030407 0.271
2 20030408 0.281
2 20030409 0.291
;
run;
proc sql;
quit;
proc sql;
quit;
STATA
计算累计的收益率 比较简单的代码。
clear all
set mem 500m
set more off
use d:\result01
rename stkcd code
rename trddt date
replace dretwd=0 if dretwd==.
keep if code=="000001"
*drop in 1/1
*drop if date>"2014-03-05"
sort code date
gen rate=dretwd+1
capture drop product1
by code:gen product1=rate
forv i=2/180 {
local j=`i'-1
g product`i'=rate*product`j'[_n+1]
}
gen ind_return=product180-1
*keep date cdretwdtl mkt_return
save d:\kkk01.dta,replace