use file1
gen tradedt = date(tradedate, "YMD") //see help date()
format tradedt %d
sort stkcd tradedt
preserve
use file2, clear // 必须保证每个证券代码只有一个事件日,如一年多次分红就不适用以下程序
gen eventdt = date(eventdate, "YMD")
format eventdt %d
sort stkcd
save, replace
restore
// 按交易日设定窗口:
merge stkcd using file2
keep if _merge == 3
drop _merge
sort stkcd tradedt
by stkcd: gen daten = _n
by stkcd: gen date0 = daten if tradedt == eventdt
by stkcd: egen dt0 = min(date0)
gen window = daten - dt0
by stkcd: gen return = closeprice[_n] / closeprice[_n - 1] - 1
by stkcd: gen mktret = mktindex[_n] / mktindex[_n-1] - 1
keep if window >= -150 & <= 60
drop daten date0 dt0 closeprice openprice mktindex
/* 按日历设定窗口:
merge stkcd using file2
keep if _merge == 3
drop _merge
sort stkcd tradedt
by stkcd: gen window = tradedt - eventdt
by stkcd: gen return = closeprice[_n] / closeprice[_n - 1] - 1
by stkcd: gen mktret = mktindex[_n] / mktindex[_n-1] - 1
keep if window >= -150 & <= 60
drop closeprice openprice mktindex
*/
[此贴子已经被作者于2008-10-11 22:19:16编辑过]