谢谢大家的帮助!但是我用楼上版主的那个语句试了一下还是不行,运行仍然出错。会不会是其他地方出错了,下面是我用的代码,希望大家能帮忙看看!感激涕零!
clear
set mem 600m
set more off
set matsize 400
use C:\Users\l\Desktop\stata\event02.dta, clear
forval i =1(1) 3 {
mkmat stkcd Trddt event0 if _n<=400, mat(event`i')
drop if _n<=400
}
drop _all
use C:\Users\l\Desktop\stata\hebingnew2.dta
forval i = 1(1) 2 {
preserve
keep if stkcd >=scalar(event`i'[1,1]) & stkcd < = scalar(event`i'[400,1])
save C:\Users\l\Desktop\stata\hebingnew2_`i',replace
restore
}
keep if stkcd > = scalar(event3[1,1]) & stkcd < = scalar(event3[265,1])
save C:\Users\l\Desktop\stata\hebingnew2_3,replace
forval m = 1(1) 3 {
local NUM = 400
if `m'==3{
local NUM = 265
}
use C:\Users\l\Desktop\stata\hebingnew2_`m',clear
sort Trddt
merge Trddt using C:\Users\l\Desktop\stata\index1,nokeep
drop _m
keep stkcd Trddt prcchgeper return
replace prcchgeper =. if prcchgeper>10.2
replace prcchgeper =. if prcchgeper<-10.2
replace prcchgeper = prcchgeper/100
replace return = return/100
forval i = 1(1)`NUM'{
disp `m'""`i' *运行的时候应该是这里有问题,显示1 “” 1 invalid name
qui drop if stkcd < scalar(event `m'[`i',1])
qui outsheet using C:\Users\l\Desktop\stata\before_event_`i'.txt if
stkcd ==scalar(event `m'[`i',1]) & Trddt > = scalar (event `m'[`i',2]) -200 & Trddt<scalar(event `m'[`i',2]),replace
qui outsheet using C:\Users\l\Desktop\stata\after_event_`i'.txt if stkcd == scalar (event`m'[`i',1]) & Trddt < = scalar(event`m'[`i',2])+30 & Trddt > = scalar (event `m'[`i',2]),replace
}
drop _all
forval i = 1(1)`NUM'{
insheet using C:\Users\l\Desktop\stata\before_event_`i'.txt,clear
save C:\Users\l\Desktop\stata\before _event_`i',replace
insheet using C:\Users\l\Desktop\stata\after _event _`i'.txt, clear
save C:\Users\l\Desktop\stata\after_event _`i', replace
erase C:\Users\l\Desktop\stata\before_event _`i'.txt
erase C:\Users\l\Desktop\stata\after_event _`i'.txt
}
drop _all
local j = 0
forval i = 1(1) `NUM' {
use C:\Users\l\Desktop\stata\before _event _`i',clear
gen reg_sample=1 if _n<_N-31
sum prcchgeper if reg_sample
local reg_sample = r(N)
if `reg_sample' <40 {
continue
}
append using C:\Users\l\Desktop\stata\after _event_`i'
reg prcchgeper return if reg_sample==1
predict abn_return if trddt > = scalar (event`m'[`i',2])-30,r
keep if abn_return ~ =.
keep _all
if _N<30 {
continue
}
local j = `j'+1
keep stkcd trddt abn_return
gen event = `j'
gen event0 = scalar(event `m'[`i',3])
sort trddt
gen time =_n-30
save C:\Users\l\Desktop\stata\event_`j', replace
erase C:\Users\l\Desktop\stata\before_event_`i'.dta
eraseC:\Users\l\Desktop\stata\after_event_`i'.dta
}
drop _all
use C:\Users\l\Desktop\stata\event_1
forval i = 2(1) `j'{
append using C:\Users\l\Desktop\stata\event _`i'
}
sore event time
save C:\Users\l\Desktop\stata\event_set`m', replace
}
clear
set more off
use C:\Users\l\Desktop\stata\event _set1.dta, clear
#delimit ;
foreach file in event_set2.dta
event_set3.dta
{;
sum event ;
local i = r(max);
gen temp = event ;
append using C:\Users\l\Desktop\stata\`file' ;
replace temp = event +`i' if temp ==.;
drop event ;
rename temp event ;
};
#delimit cr
sort event0
merge event0 using C:\Users\l\Desktop\stata\event2, nokeep
drop _m
sort event time
by event:gen CAR =sum(abn_return)
sort time
by time:egen CAR_mean = mean(CAR)
twoway line CAR time
twoway line CAR_mean time
sort event time
save C:\Users\l\Desktop,replace
再次感谢啦!