*五天
forvalues i=1/2107{
use testdata.dta, clear
destring stkcd year rplyddln,replace
compress
*change, 先按唯一顺序排列后再计算比较好,不容易出错***
gen id = _n
order id stkcd year rplyddln
keep id-rplyddln
keep if id==`2107'
merge 1:m stkcd using alldalyr.dta
*有的个股匹配不到交易数据,生成缺漏
egen count_merge=count(_merge) if (_merge==3)
if count_merge==. {
gen CAR=.
keep CAR id year
*change, 保留并购ID变量macqid,方便后面与并购数据合并
keep if _n==1
save CAR`i'.dta,replace
}
else {
keep if _merge==3
sort Trddt
drop _merge
// merge m:m markettype using dalymr.dta //找到所属市场的回报率
merge m:1 markettype Trddt using dalymr.dta
*change, m:1匹配***
keep if _merge==3
drop _merge
order stkcd rplyddln Trddt dretwd dretwdeq
gen dtn=_n
order dtn
*有些公告日非交易日,选择寻求差值最小并且在公告日之后的那一天作为T0
gen dif0 = Trddt - rplyddln
egen T=min(dif0) if Trddt>=rplyddln //最小差值
gen N=_n if T!=. //给最小差值标号
egen td=min(N) //找到第一个,就是T0
order td
gen dif=dtn-td //dif寻找目标日期
order dif
*有些个股没有前150天到前30天的交易数据,需要生成缺漏%XD6
*用count判断观察值是否足够来筛选
gen event_window=1 if (dif>=-2&dif<=2)
egen count_event=count(event_window)
replace event_window=0 if event_window==.
gen estimation_window=1 if (dif>=-150&dif<=-30)
egen count_est=count(estimation_window)
replace estimation_window=0 if estimation_window==.
*条件语句过滤,估计窗口没有观察值的CAR为缺漏值
*先不设置count_est<120这么严格,可以设count_est<10,这个规则可调,只要够数据做回归即可
if (count_event<3|count_est<10){
gen CAR=.
keep CAR id year //***change, 保留并购ID变量macqid,方便后面与并购数据合并
keep if _n==1
save CAR`i'.dta,replace
}
else{
*估计EVENT WINDOW里的个股回报率
reg dretwd dretwdeq if (dif>=-150&dif<=-30)
predict predicted_r if (dif>=-2&dif<=2)
order predicted_r
*计算CAR
gen AR=dretwd - predicted_r if (dif>=-2&dif<=2)
order AR
egen CAR=total(AR)
keep CAR id year //***change, 保留并购ID变量macqid,方便后面与并购数据合并
keep if _n==1
save CAR`i'.dta,replace
}
}
}


雷达卡


京公网安备 11010802022788号







