/*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*/