曾玉霞 发表于 2022-3-10 16:04 
没有 请问你找到方法了吗
use 周个股回报率.dta, clear
gen 周换手率=周个股交易金额/(周个股流通市值*10^3)
* 缩尾处理
winsor2 周换手率, cuts(1 99) replace
save data.dta, replace
*-定义程序
capture program drop calc_cgo
program define calc_cgo
qui {
* 对于每一只股票,在每月末,首先通过过去五年的周收盘价和换手率(我们要求至少要有60%的非缺失值)计算出参考价格(Reference Price)
egen w=group(交易周份)
xtset stkcd w
forv i=1/260 {
gen P_`i'=L`i'.周收盘价
}
forv i=1/260 {
gen V_`i'=L`i'.周换手率
}
* 1-V
gen V2=1-周换手率
* 取对数方便连乘
gen lnV2=ln(V2)
* t-n+1 t-1
gen VV_1=1
forv i=2/260 {
local j=-`i'+1
rangestat (sum) lnV2_`i'=lnV2, by(stkcd) i(w `j' -1)
gen VV_`i'=exp(lnV2_`i')
drop lnV2_`i'
}
forv i=1/260 {
gen t_`i'=(V_`i'*VV_`i')*P_`i'
}
forv i=1/260 {
gen k_`i'=V_`i'*VV_`i'
}
egen t2=rowtotal(t_*)
egen k=rowtotal(k_*)
gen RP=t2/k
gen CGO=(P_1-RP)/P_1
rangestat (count) N=周换手率, by(stkcd) i(w -260 -1)
* 要求至少要有60%的非缺失值
drop if N<260*0.6
* 剔除缺失值
drop if CGO==.
* 保留月末数据
gen month=substr(周收盘日期, 1, 7)
gsort stkcd month -周收盘日期
bys stkcd month: keep if _n==1
keep stkcd month CGO
}
end
use data.dta, clear
runby calc_cgo, by(stkcd) verbose
save CGO.dta, replace
*=======================================================================
* 资本利得计算(3年-稳健性性)
*=======================================================================
*-定义程序
capture program drop calc_cgo2
program define calc_cgo2
qui {
* 对于每一只股票,在每月末,首先通过过去五年的周收盘价和换手率(我们要求至少要有60%的非缺失值)计算出参考价格(Reference Price)
egen w=group(交易周份)
xtset stkcd w
forv i=1/130 {
gen P_`i'=L`i'.周收盘价
}
forv i=1/130 {
gen V_`i'=L`i'.周换手率
}
* 1-V
gen V2=1-周换手率
* 取对数方便连乘
gen lnV2=ln(V2)
* t-n+1 t-1
gen VV_1=1
forv i=2/130 {
local j=-`i'+1
rangestat (sum) lnV2_`i'=lnV2, by(stkcd) i(w `j' -1)
gen VV_`i'=exp(lnV2_`i')
drop lnV2_`i'
}
forv i=1/130 {
gen t_`i'=(V_`i'*VV_`i')*P_`i'
}
forv i=1/130 {
gen k_`i'=V_`i'*VV_`i'
}
egen t2=rowtotal(t_*)
egen k=rowtotal(k_*)
gen RP=t2/k
gen CGO2=(P_1-RP)/P_1
rangestat (count) N=周换手率, by(stkcd) i(w -130 -1)
* 要求至少要有60%的非缺失值
drop if N<130*0.6
* 剔除缺失值
drop if CGO2==.
* 保留月末数据
gen month=substr(周收盘日期, 1, 7)
gsort stkcd month -周收盘日期
bys stkcd month: keep if _n==1
keep stkcd month CGO2
}
end
use data.dta, clear
runby calc_cgo2, by(stkcd) verbose
save CGO2.dta, replace