gen date_trade=date(date, "YMD")
gen date_ann=date(date_announce, "YMD")
by code: gen dum_date_announce=0 if date_ann>date_trade[_n-1] & date_ann5 & dum_date_announce==0
drop code_dum
gen date_trade=date(date, "YMD")
gen date_ann=date(date_announce, "YMD")
by code: gen dum_date_announce=0 if date_ann>date_trade[_n-1] & date_ann<=date_trade
replace dum_date_announce=1 if dum_date_announce!=0
replace code_dum=code_dum[_n-1] if code==code[_n-1]
keep if code_dum==. // nontradingnum>5 & dum_date_announce==0
drop code_dum
对于第二个问题,周末发生的事件,可以前推或者后移,比如周六发生的事件,可以把事件的0 day改为周五或者下周一,这样就可以匹配了。对于这个操作,Stata命令如下:
***Weekend Adjustment***
gen weekday=dow(DateAnnounced)
gen adj_DateAnnounced=DateAnnounced
replace adj_DateAnnounced=DateAnnounced+2 if weekday==6
replace adj_DateAnnounced=DateAnnounced+1 if weekday==0
楼主可以借鉴普灵斯顿那个命令程序的思想。最近我也在写这个事件研究的do文件~刚好前两天完成了。把我的给你看看哈~
sort stkcd year date
egen group_id = group(stkcd year)
sort group_id date /* replace company_id with group_id */
drop if year!=year[_n+1] & _merge==2
sort group_id date
replace datestock=datestock[_n+1] if _merge==2
replace ret=ret[_n+1] if _merge==2
replace yearstock=yearstock[_n+1] if _merge==2
duplicates drop stkcd datestock ret, force
以上命令可以替换停牌和周末。