***
use r,clear
merge m:m year week using m_r
keep if _merge==3
drop _merge
sort stkcd year week
order stkcd year week
cap drop date
egen date = group(year week), label lname(year_week)
xtset stkcd date
*生成公式(1)中所需的滞后与前推的变量
gen lag1_m_r=l1.m_r
gen lag2_m_r=l2.m_r
gen fwd1_m_r=f1.m_r
gen fwd2_m_r=f2.m_r
bysort stkcd year:egen n=count(year)
drop if n<30
drop n
*剔除交易周数不足30的样本,
*回归、获取公式(1)的残差resid,并计算,股票特质收益率rret = 1n( 1 +resid)
qui levelsof stkcd, local(stkcd)
capture drop resid
ge resid = .
foreach stk of local stkcd {
qui :reg wret lag1_m_r lag2_m_r m_r fwd1_m_r fwd2_m_r if stkcd == `stk'
qui predict res if e(sample), res
qui replace resid = res if e(sample)
drop res
}
ge rret = log(resid + 1)
*transfrom the residual return
sort stkcd date
drop n
*计算NCSKEW
bys stkcd year : egen ave=mean(rret)
ge rret3 = (rret-ave)^3
ge rret2 = (rret-ave)^2
bysort stkcd year :egen n=count(wret) if wret!=0
*collapse (sum) rret2 rret3 n ,by(stkcd y)
collapse (sum) rret2 rret3 (count) n = rret,by(stkcd y)
*得到了所有所需变量
gen NCSKEW= -[n*(n-1)^(3/2)*rret3]/[(n-1)*(n-2)*(rret2)^(3/2)]
*crash risk,NCSKEW
sum NCSKEW
sort stkcd y