/*data replicate:firm, date, evntdate年报公布日,evntdum(如果当年net income大于前一年的,那么取值为1,否者为-1), ret, mkt*/
data replicate;
set et.replicate;
format date evntdate yymmdd6.;
before=date<evntdate; /*before:虚拟变量,为了后面定义relday*/
run;
proc sort data=replicate;
by firm evntdate date;
proc means data=replicate noprint;
by firm evntdate;
output out=nreturns(drop=_type_ _freq_) sum(before)=bef_sum;
run;
data estper evntper;
merge replicate(drop=before) nreturns;
by firm evntdate;
if first.evntdate then relday=-bef_sum-1;
relday+1;
if relday>=-11 and relday<=-1 then output estper;
if relday=0 then output evntper;
run;
/*回归*/
proc reg data=estper outest=mmparam(rename=(intercept=alpha mktret=beta) keep=firm evntdate intercept mktret) noprint;
by firm evntdate;
model ret=mktret;
quit;
/*计算事件窗异常收益*/
data evntar;
merge evntper mmparam;
by firm evntdate;
ar=ret-alpha-beta*mktret;
run;
/*从事件窗异常收益evntar中将good news数据集和bad news数据集分出来*/
data evntarr;
set evntar;
if relday=. then delete;
data goodevntar;
set evntarr;
if evntdum>0;
run;
data badevntar;
set evntarr;
if evntdum<0;
run;
/*计算事件窗平均异常收益*/
proc means data=evntarr noprint;
by relday ;
output out=evntaar mean(ar)=aar;
run;
proc means data=goodevntar noprint;
by relday ;
output out=goodevntaar mean(ar)=goodaar;
run;
proc means data=badevntar noprint;
by relday ;
output out=badevntaar mean(ar)=badaar;
run;
/*计算估计窗异常收益*/
data estar;
merge estper mmparam;
by firm evntdate;
ar=ret-alpha-beta*mktret;
run;
/*从估计窗异常收益estar中将good news数据集和bad news数据集分出来*/
proc sort data=estar; /*排序;*/
by relday;
data estarr;
set estar;
if relday=. then delete;
data goodestar;
set estarr;
if evntdum>0;
run;
data badestar;
set estarr;
if evntdum<0;
run;
/*计算估计窗平均异常收益*/
proc means data=estarr noprint;
by relday ;
output out=estaar mean(ar)=aar;
run;
proc means data=goodestar noprint;
by relday ;
output out=goodestaar mean(ar)=goodaar;
run;
proc means data=badestar noprint;
by relday ;
output out=badestaar mean(ar)=badaar;
run;
/*将估计窗和事件窗按照relday从-11到0合并*/
data aar;
set estaar evntaar;
run ;
data goodaar;
set goodestaar goodevntaar;
run ;
data badaar;
set badestaar badevntaar;
run ;
data aar3;
merge aar goodaar badaar;
/*计算car*/
data caar3;
set aar3;
caar=caar+aar;
retain caar 0;
goodcaar=goodcaar+goodaar;
retain goodcaar 0;
badcaar=badcaar+badaar;
retain badcaar 0;
run;
/*画图*/
goptions reset=all;
proc gplot data=caar3;
plot caar*relday goodcaar*relday badcaar*relday/overlay legend;
symbol1 color=black i=join v=star;
symbol2 c=blue i=join v=dot;
symbol3 c=red i=join v=diamond;
run;