单独运行我刚刚发现没错我,可是我刚刚又运行前半部分,发现后半部分还是出现上面这种情况,我把全部代码贴过来,麻烦大神帮我看一下,万分感谢

clear
capture mkdir D:/事件研究/
input stkcd str10 Eventdate
600624 "2015-4-18"
000060 "2015/4/2"
600335 "2014/10/28"
600352 "2014/10/25"
600369 "2014/10/25"
600600 "2014/3/26"
600624 "2015/4/28"
600635 "2015/4/3"
600801 "2015/1/13"
600827 "2015/4/17"
600970 "2014/10/25"
601006 "2014/10/30"
601328 "2014/3/31"
601669 "2014/10/31"
601766 "2014/10/31"
601800 "2013/3/28"
601939 "2014/3/31"
601998 "2014/3/28"
000637 "2014/10/23"
600843 "2014/10/31"
600837 "2014/3/29"
601818 "2014/3/31"
002678 "2015/5/27"
end
set matsize 500
cap gen Eventdate1=date(Eventdate,"YMD")
drop Eventdate
rename Eventdate1 Eventdate
format Eventdate %dCY-N-D // 日期从字符串型转换为数值型
sort stkcd Eventdate // stkcd、Eventdate 分表为事件列表矩阵的两列
local n=_N // N为矩阵的行数
mkmat stkcd Eventdate, mat(event) // 事件列表数据存储为名为event的矩阵
cap which cntrade
if _rc!=0{
ssc install cntrade
}
capture postclose event
postfile event id stkcd CAR1 CAR2 CAR3 CAR4 ///
CAR5 CAR6 CAR7 CAR8 CAR9 CAR10 CAR11 CAR12 CAR13 CAR14 ///
using "D:/事件研究/事件研究.dta",replace
cntrade 000300, index
keep date rmt
sort date
save "D:/事件研究/index.dta",replace
clear
cntrade 600624, path("D:/事件研究/")
keep stkcd date rit // 只保留我们所需的股票代码日期和收益率信息
sort date
merge 1:1 date using "D:/事件研究/index.dta"
drop _m
order stkcd date rit rmt
*可以确定事件日为2015-4-18:
local date = date("2015-04-18","YMD")
*定义事件日`date’ 前的时间变量为-1,-2,-3...:
preserve
keep if date<`date' // 保留事件日前的数据
gsort -date // 按日期倒排序
gen time=-_n // 生成事件变量为行数序号的相反数
keep if time>=-200 // 保留事件日前200天的数据
save "D:/事件研究/pre_event.dta", replace
restore
*生成事件日后的时间变量0,1,2,........:
keep if date>=`date' // 保留事件日及其之后的数据
sort date
gen time = _n-1 // 生成时间变量,事件日为0,事件后为1,2,3...
keep if time<=10
*事件日前后数据合并:
append using "D:/事件研究/pre_event.dta"
*假定估计窗口是(-200,-10),事件窗口是(-3,10)
*在估计窗口用个股收益率(rit)对市场交易率(rmt)做回归,并估计事件窗口的异常收益率:
qui reg rit rmt if time<=-10
predict AR if time>=-3, r
*保留事件窗口期的数据,使用sum命令累加得到累计超额收益率:
keep if time>=-3
sort time
gen CAR = sum(AR)
keep stkcd time CAR
*这时需要我们对行号进行循环,来达到事件列表里所有事件进行研究:
forval i=1/`n' { // 对矩阵行号进行循环
local date = scalar(event[`i',2]) // 提取该行的事件日期
local stkcd = scalar(event[`i',1]) // 提取该行的股票代码
dis `stkcd'
clear
cntrade `stkcd', path("D:/事件研究/")
keep stkcd date rit
drop in 1
sort date
merge m:m date using "D:/事件研究/index.dta"
drop _m
order stkcd date rit rmt
preserve
keep if date<`date'
gsort -date
gen time=-_n
keep if time>=-200
save "D:/事件研究/pre_event.dta", replace
restore
keep if date>=`date'
sort date
gen time = _n-1
keep if time<=10
append using "D:/事件研究/pre_event.dta"
qui reg rit rmt if time<=-10
predict AR if time>=-3, r
keep if time>=-3
sort time
gen CAR = sum(AR)
keep stkcd time CAR
forvalues m=1(1)14{
local CAR`m'=CAR[`m']
}
post event(`i') (`stkcd') (`CAR1') (`CAR2') ///
(`CAR3') (`CAR4') (`CAR5') (`CAR6') (`CAR7') ///
(`CAR8') (`CAR9') (`CAR10') (`CAR11') ///
(`CAR12') (`CAR13') (`CAR14') ///
}
postclose event
use D:/事件研究/事件研究.dta,clear