libname my 'c:\\teaching\\renda';
options nodate nocenter nonumber ps=max ls=72 fullstimer; title ' ';
/* Dataset temp1 has each event's firm id and date */ /* Dataset temp2 has firm level stock returns */ /* Dataset temp3 has market indices returns */
proc sort nodupkey data=my.temp1 ;by Stkcd Trddt;
proc sort data=my.temp2;by Stkcd Trddt;
data temp3;set my.temp3;if Markettype=1;
proc sort data=temp3;by Trddt;run;
/* ------------------------------------------------- */ /* Merge the firm return data with event data */ /* ------------------------------------------------- */
data temp;
merge my.temp1 my.temp2;by Stkcd Trddt;
proc sort data=temp;by Trddt;
/* ------------------------------------------------- */ /* Merge with market indicies file */ /* ------------------------------------------------- */
data temp; merge temp temp3; by Trddt; if stkcd=. then delete; run;
proc sort data=temp; by Stkcd Trddt;
/* -------------------------------------------------- */
/* create variable time that is zero the event day, negative before */ /* before the event day (for example ten days before the event day */ /* time = -10), and positive after the event day. */ /* ---------------------------------------------------------- */
data temp; set temp; by Stkcd; if first.Stkcd then count=0; count+1;
data event; set temp;
if eventdate=1; ecount=count; keep Stkcd ecount capchgdt;
data event; set event; by Stkcd; if first.Stkcd then eventnumber=0; eventnumber+1;
data event;set event; if eventnumber=2;
proc sort data=event; by Stkcd;
proc sort data=temp; by Stkcd;
data temp; merge temp event; by Stkcd;
proc sort data=temp; by Stkcd Trddt;
/* ---------------------------------------------- ------ */
/* Create variable fret and mret--firm return and market return */ /* -------------------------------------------------------------- */
data final; set temp; fret=Dretwd; mret=Dretwdos;
run;
proc sort; by Stkcd;
/* ----------------------------------------------------------------- */ /* Run regressions and calculate abnormal returns in the event window */ /* Estimatin window is -120 to -10, event window is -5 to 5 */ /* ------------------------------------------------------------- */
proc reg noprint data=final outest=mfinal; model fret=mret;
where count-ecount >= -120 and count-ecount < -10; by Stkcd;
data mfinal; set mfinal; alpha=intercept; beta =mret;
keep Stkcd alpha beta;
data final; merge final mfinal; by Stkcd;
if count-ecount >= -5 and count-ecount <= 5; aret = fret - alpha - beta*mret;
proc summary data=final; var aret; by Stkcd;
output out=sfinal sum=car stderr=stdcar;
/* ----------------------------------------------------------- */ /* This section calculates */
/* mean cumulative average (sum over firms), and calculates a t-test */ /* Null Hypothesis is mean cumulative average abnormal return= zero */ /* --------------------------------------------------------------- */
proc summary data=sfinal; var car;
output out=scars mean=meancar stderr =stdcar;
data scars; set scars; J1=meancar/stdcar;
keep meancar stdcar J1;
/* ------------------------------------------------------------- */ /* Print Results */
/* -------------------------------------------------------------- */
proc print;
title \; run;