/*libname us '\\tsclient\e\badm742';*/
libname us 'f:\badm742';
/*the following sas code is to calculate the results for the third part of assignment #4*/
/*data clean*/
data a0; set us.crsp2017;
year=year(date); month=month(date);
if ret>-1;
mktval=prc*shrout;
ifmktval0;
keepcusip year month prc ret mktval;
run;
/* Keep stocks without missing data over 12 months for a given year*/
data a00; set a0;
if year=1994thendelete;
keepcusip year month ret;
run;
procsortdata=a00; bycusip year month; run;
proctransposedata=a00 out=a01; bycusip year; idmonth;run;
data a02; set a01;
Jan=_1;Feb=_2;Mar=_3;Apr=_4;May=_5;Jun=_6;Jul=_7;Aug=_8;Sep=_9;Oct=_10;Nov=_11;Dec=_12;
keepcusip year Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec;run;
data a03; set a02;
ifjan=.orfeb=.or mar=.orapr=.or may=.orjun=.orjul=.oraug=.orsep=.oroct=.ornov=.ordec=.thendum=0;
elsedum=1;
keepcusip year dum;
Run;
procsortdata=a0; bycusip year; run;
procsortdata=a03; bycusip year; run;
data a; merge a0 a03; bycusip year; ifdum=0thendelete;run;
/*all stocks are ranked into five subgroups based on their book-to-market value ratios in previous year*/
datamktval; set a;
year=year+1;
if month=12;
keepcusip year prcmktval;
run;
databkval; set us.compu2017;
year=fyear+1;
keepcusip year bkvlps;
run;
procsortdata=mktval; bycusip year; run;
procsortdata=bkval; bycusip year; run;
data b; mergemktvalbkval; bycusip year; bm=bkvlps/prc; run;
procsortdata=b; by year bm; run;
procrankgroups=5data=b out=c;
varbm; ranks s1; by year; run;
data d; set c;
group=s1+1;
keepcusip year group;
run;
procsortdata=d; bycusip year; run;
/* get monthly returns for the period between 1995 and 2016, and assign every stock to one of 5 portfolios*/
datastk; set a;
if year=1995thendelete;
keepcusip year month ret;
run;
procsortdata=stk; bycusip year month; run;
proctransposedata=stkout=stk1; bycusip year; idmonth;run;
data stk2; set stk1;
Jan=_1;Feb=_2;Mar=_3;Apr=_4;May=_5;Jun=_6;Jul=_7;Aug=_8;Sep=_9;Oct=_10;Nov=_11;Dec=_12;
keepcusip year Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec;run;
data stk3; set stk2;
ifjan=.orfeb=.or mar=.orapr=.or may=.orjun=.orjul=.oraug=.orsep=.oroct=.ornov=.ordec=.thendelete;
AR=(1+Jan)*(1+Feb)*(1+Mar)*(1+Apr)*(1+May)*(1+Jun)*(1+Jul)*(1+Aug)*(1+Sep)*(1+Oct)*(1+Nov)*(1+Dec)-1;
keepcusip year AR;
Run;
procsortdata=stk3; bycusipyear;run;
procsortdata=d; bycusipyear;run;
data all; merge stk3 d; bycusip year; run;
/* calculate the annual return per portfolio, per year*/
procsortdata=all; by year group; run;
procmeansdata=all noprint;
varar; by year group;
outputout=final
mean = ret_p;
data final; set final; keep group year ret_p; run;
/*calculate mean, std of annual returns of five portfolios for the study period*/
procsortdata=final; by group; run;
procmeansdata=final noprint;
varret_p; by group;
outputout=final1
mean = mean_ret
std = std_ret;
data final1; set final1; keep group mean_retstd_ret; run;
/* final results for means of annual returns of ten portfolios can be found in final1 dataset*/
/* test the significance of difference in returns between low book-to-market value portfolio and high book-to-market value portfolio*/
data p1; set final;
if group=1;
ret_p1=ret_p;
keep year ret_p1;
run;
data p5; set final;
if group=5;
ret_p5=ret_p;
keep year ret_p5;
run;
procsortdata=p1; by year; run;
procsortdata=p5; by year; run;
data t; merge p1 p5; by year;
diff = ret_p5 - ret_p1;
run;
procmeansdata=tnoprint;
var diff;
outputout=t_test
mean = m_diff
std = std_diff
n = nob;
datat_test; sett_test; t=(m_diff/std_diff)*sqrt(nob);
keepm_diffstd_diff nob t;
run;
/* you will find t-stat in the table t_test*/