Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %let wrds = wrds.wharton.upenn.edu 4016;
- options comamid=TCP remote=WRDS;
- signon username=_prompt_;
- rsubmit;
- options source nocenter ls=72 ps=max;
- libname comp '/wrds/comp/sasdata/d_na';
- libname crsp ('/wrds/crsp/sasdata/a_ccm','/wrds/crsp/sasdata/a_stock','/wrds/crsp/sasdata/a_indexes');
- data crsp;
- set crsp.dsf;
- if year(date)=1984;
- *remove duplicates;
- proc sort data = crsp
- dupout = duplicates
- noduprecs;
- by permno;
- proc sql;
- create table crsp1 as
- select *,count(date) as count_date
- from crsp
- group by permno;
- quit;
- *delete observations if trading days less than 240;
- data crsp2; set crsp1;
- if count_date <=240 then delete;
- proc sort data = crsp2; by permno date;
- data crsp2a; set crsp2;
- cyear=year(date);
- data crsp3; set crsp2a;
- by permno;
- lag_ret=lag(ret);
- if first.permno then lag_ret=.;
- data crsp4; set crsp3;
- by permno;
- if first.permno then x=1;
- else x+1;
- proc sort data=crsp4;
- by permno descending x;
- data crsp5; set crsp4;
- by permno descending x;
- l=lag(x);
- lead_ret=lag(ret);
- if first.permno then do;
- l=.;
- lead_ret=.;
- end;
- proc sort data=crsp5;
- by permno x;
- data crsp6; set crsp5;
- keep permno date cyear ret lag_ret lead_ret ;
- proc sort data=crsp6; by permno date;
- data crsp7;set crsp6;
- by permno cyear;
- if first.permno then cumret1 = 1;
- if missing(ret)=0 then cumret1 = cumret1 * (1+ret);
- else cumret1 = cumret1;
- cumret = cumret1 - 1;
- retain cumret1;
- label cumret = "Cumulative Annual Return";
- data crsp7a; set crsp6;
- by permno;
- if first.permno then cumret1 = 1;
- if missing(ret)=0 then cumret1 = cumret1 * (1+ret);
- else cumret1 = cumret1;
- cumret = cumret1 - 1;
- retain cumret1;label cumret = "Cumulative Annual Return";
- if last.permno then output;
- data crsp7b; set crsp7a;
- annual_return=cumret;
- drop cumret;
- proc sql;
- create table crsp8 as select a.*,b.annual_return from crsp7 as a left join crsp7b as b on a.permno=b.permno and a.cyear=b.cyear;
- proc sort data=crsp8; by permno date;
- data comp;
- set comp.fundq;
- if indfmt='INDL' and datafmt='STD' and popsrc='D' and consol='C';
- if year(rdq)=1984;
- data comp1; set comp;
- cyear1=year(rdq);
- proc sort data = comp1; by gvkey cik cusip cyear1 rdq;
- proc sql;
- create table comp2 as
- select *,count(rdq) as count_rdq
- from comp1
- group by gvkey, cyear1;
- quit;
- *delete observations if announcement windows not exactly 4;
- data comp3; set comp2;
- if count_rdq ne 4 then delete;
- data comp4; set comp3;
- before=rdq-1;
- event=rdq;
- after=rdq+1;
- data comp5; set comp4;
- format before yymmdd10.;
- format event yymmdd10.;
- format after yymmdd10.;
- data comp6; set comp5;
- if year(before) ne cyear1 then delete;
- if year(after) ne cyear1 then delete;
- proc sql;
- create table merge1
- as select distinct a.*, b.lpermno as permno,
- case when b.linkprim = 'P' then 2 when b.linkprim = 'C' then 1 else 0 end as LinkScore
- from comp6 as a, crsp.CCMXPF_LNKHIST as b
- where a.gvkey = b.gvkey
- and b.lpermno ne .
- and b.LINKTYPE in ("LC", "LU", "LS", "LN")
- and ((a.datadate >= b.LINKDT) or b.LINKDT = .B)
- and ((a.datadate <= b.LINKENDDT) or b.LINKENDDT = .E)
- group by a.gvkey, a.datadate
- having LinkScore = max(LinkScore);
- quit;
- proc sql;
- create table merge2 as select a.*, b.date, b.ret, b.lag_ret, b.lead_ret, b.cumret, b.annual_return from merge1 as a left join crsp8 as b on a.permno= b.permno and a.rdq= b.date;
- proc sort data = merge2; by permno rdq;
- proc sql;
- create table merge3 as
- select *,count(rdq) as count_rdq1
- from merge2
- group by permno, cyear1;
- quit;
- *delete observations if announcement windows not exactly 4;
- data merge4; set merge3;
- if count_rdq1 ne 4 then delete;
- proc sort data=merge4; by permno rdq;
- data merge5; set merge4;
- window_return=(1+lag_ret)*(1+ret)*(1+lead_ret)-1;
- data merge6; set merge5;
- by permno;
- if first.permno then x=1;else x+1;
- data merge7; set merge6;
- by permno;
- if first.permno then do;
- window1_return= .;
- window2_return= .;
- window3_return= .;
- window4_return= .;
- end;
- if x=1 then do;
- window1_return=window_return;
- end;
- if x=2 then do;
- window2_return=window_return;
- end;
- if x=3 then do;
- window3_return=window_return;
- end;
- if x=4 then do;
- window4_return=window_return;
- end;
- if last.permno then output;
- retain window1_return window2_return window3_return window4_return;
- run;
- proc download data=merge7;
- data merge8; set merge7;
- proc reg data = merge8;
- model annual_return = window1_return window2_return window3_return window4_return;
- run;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement