options nocenter ls=80; libname temp 'd:\empirical methods\'; filename tempdir 'd:\empirical methods\'; *Read in data created from Ken French's website for the 10 size portfolios; data ret10; informat date yymmn6.; format date yymmn6.; infile tempdir(sizedecilereturns.csv) missover firstobs=3 dlm=','; input date r1-r10; year=year(date); month=month(date); proc sort; by date; proc print data=ret10 (obs=20); proc means; run; *Read in the Fama French Factors from Ken French's website; data fffact; informat date yymmn6.; format date yymmn6.; infile tempdir(F-F_Research_Data_Factors.txt) missover firstobs=5; input date mkt smb hml rf; lmkt=lag(mkt); proc sort; by date; proc print data=fffact (obs=100); proc means; run; data all; merge ret10 fffact; by date; r1=r1-rf; r2=r2-rf; r3=r3-rf; r4=r4-rf; r5=r5-rf; r6=r6-rf; r7=r7-rf; r8=r8-rf; r9=r9-rf; r10=r10-rf; if year<1963 then delete; proc sort; by year month; proc means; run; *Read in the macro variables default spread, dividend yield, and 3 month tbill yield; data macro; set temp.macro; proc sort; by year month; run; data macro; set macro; ldef=lag(def); ldiv=lag(div); lyld3=lag(yld3); run; data all; merge all (in=A) macro (in=B); by year month; if A and B; proc means; run; *Estimate forecasting regressions Table 2; proc reg data=all; model r1=ldef ldiv lyld3; model r2=ldef ldiv lyld3; model r3=ldef ldiv lyld3; model r4=ldef ldiv lyld3; model r5=ldef ldiv lyld3; model r6=ldef ldiv lyld3; model r7=ldef ldiv lyld3; model r8=ldef ldiv lyld3; model r9=ldef ldiv lyld3; model r10=ldef ldiv lyld3; run; *Single portfolio tests Table 5; proc model data=all; parms d0-d3 m0-m3 lambda; exogenous r10 mkt; instruments ldef lyld3 ldiv; eq.one=r10-(d0+d1*lyld3+d2*ldiv+d3*ldef); eq.two=mkt-(m0+m1*lyld3+m2*ldiv+m3*ldef); eq.three=r10-lambda*(mkt-(m0+m1*lyld3+m2*ldiv+m3*ldef))*(r10-(d0+d1*lyld3+d2*ldiv+d3*ldef)); fit one two three /gmm; run; *Multi-portfolio tests Table 6--Overidentifying restrictions test; proc model data=all; parms d10-d13 d20-d23 d30-d33 d40-d43 d50-d53 d60-d63 d70-d73 d80-d83 d90-d93 d100-d103 m0-m3 lambda; exogenous r1-r10 mkt; instruments ldef lyld3 ldiv; eq.one=r1-(d10+d11*lyld3+d12*ldiv+d13*ldef); eq.two=r2-(d20+d21*lyld3+d22*ldiv+d23*ldef); eq.three=r3-(d30+d31*lyld3+d32*ldiv+d33*ldef); eq.four=r4-(d40+d41*lyld3+d42*ldiv+d43*ldef); eq.five=r5-(d50+d51*lyld3+d52*ldiv+d53*ldef); eq.six=r6-(d60+d61*lyld3+d62*ldiv+d63*ldef); eq.seven=r7-(d70+d71*lyld3+d72*ldiv+d73*ldef); eq.eight=r8-(d80+d81*lyld3+d82*ldiv+d83*ldef); eq.nine=r9-(d90+d91*lyld3+d92*ldiv+d93*ldef); eq.ten=r10-(d100+d101*lyld3+d102*ldiv+d103*ldef); eq.eleven=mkt-(m0+m1*lyld3+m2*ldiv+m3*ldef); eq.twelve=r1-lambda*(mkt-(m0+m1*lyld3+m2*ldiv+m3*ldef))*(r1-(d10+d11*lyld3+d12*ldiv+d13*ldef)); eq.thirteen=r2-lambda*(mkt-(m0+m1*lyld3+m2*ldiv+m3*ldef))*(r2-(d20+d21*lyld3+d22*ldiv+d23*ldef)); eq.fourteen=r3-lambda*(mkt-(m0+m1*lyld3+m2*ldiv+m3*ldef))*(r3-(d30+d31*lyld3+d32*ldiv+d33*ldef)); eq.fifteen=r4-lambda*(mkt-(m0+m1*lyld3+m2*ldiv+m3*ldef))*(r4-(d40+d41*lyld3+d42*ldiv+d43*ldef)); eq.sixteen=r5-lambda*(mkt-(m0+m1*lyld3+m2*ldiv+m3*ldef))*(r5-(d50+d51*lyld3+d52*ldiv+d53*ldef)); eq.seventeen=r6-lambda*(mkt-(m0+m1*lyld3+m2*ldiv+m3*ldef))*(r6-(d60+d61*lyld3+d62*ldiv+d63*ldef)); eq.eighteen=r7-lambda*(mkt-(m0+m1*lyld3+m2*ldiv+m3*ldef))*(r7-(d70+d71*lyld3+d72*ldiv+d73*ldef)); eq.nineteen=r8-lambda*(mkt-(m0+m1*lyld3+m2*ldiv+m3*ldef))*(r8-(d80+d81*lyld3+d82*ldiv+d83*ldef)); eq.twenty=r9-lambda*(mkt-(m0+m1*lyld3+m2*ldiv+m3*ldef))*(r9-(d90+d91*lyld3+d92*ldiv+d93*ldef)); eq.twentyone=r10-lambda*(mkt-(m0+m1*lyld3+m2*ldiv+m3*ldef))*(r10-(d100+d101*lyld3+d102*ldiv+d103*ldef)); fit one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone/gmm kernel=(bartlett,4,0);; run; *Table 6--Wald Test; proc model data=all; parms d10-d13 d20-d23 d30-d33 d40-d43 d50-d53 d60-d63 d70-d73 d80-d83 d90-d93 d100-d103 m0-m3 l1-l10; exogenous r1-r10 mkt; instruments ldef lyld3 ldiv; eq.one=r1-(d10+d11*lyld3+d12*ldiv+d13*ldef); eq.two=r2-(d20+d21*lyld3+d22*ldiv+d23*ldef); eq.three=r3-(d30+d31*lyld3+d32*ldiv+d33*ldef); eq.four=r4-(d40+d41*lyld3+d42*ldiv+d43*ldef); eq.five=r5-(d50+d51*lyld3+d52*ldiv+d53*ldef); eq.six=r6-(d60+d61*lyld3+d62*ldiv+d63*ldef); eq.seven=r7-(d70+d71*lyld3+d72*ldiv+d73*ldef); eq.eight=r8-(d80+d81*lyld3+d82*ldiv+d83*ldef); eq.nine=r9-(d90+d91*lyld3+d92*ldiv+d93*ldef); eq.ten=r10-(d100+d101*lyld3+d102*ldiv+d103*ldef); eq.eleven=mkt-(m0+m1*lyld3+m2*ldiv+m3*ldef); eq.twelve=r1-l1*(mkt-(m0+m1*lyld3+m2*ldiv+m3*ldef))*(r1-(d10+d11*lyld3+d12*ldiv+d13*ldef)); eq.thirteen=r2-l2*(mkt-(m0+m1*lyld3+m2*ldiv+m3*ldef))*(r2-(d20+d21*lyld3+d22*ldiv+d23*ldef)); eq.fourteen=r3-l3*(mkt-(m0+m1*lyld3+m2*ldiv+m3*ldef))*(r3-(d30+d31*lyld3+d32*ldiv+d33*ldef)); eq.fifteen=r4-l4*(mkt-(m0+m1*lyld3+m2*ldiv+m3*ldef))*(r4-(d40+d41*lyld3+d42*ldiv+d43*ldef)); eq.sixteen=r5-l5*(mkt-(m0+m1*lyld3+m2*ldiv+m3*ldef))*(r5-(d50+d51*lyld3+d52*ldiv+d53*ldef)); eq.seventeen=r6-l6*(mkt-(m0+m1*lyld3+m2*ldiv+m3*ldef))*(r6-(d60+d61*lyld3+d62*ldiv+d63*ldef)); eq.eighteen=r7-l7*(mkt-(m0+m1*lyld3+m2*ldiv+m3*ldef))*(r7-(d70+d71*lyld3+d72*ldiv+d73*ldef)); eq.nineteen=r8-l8*(mkt-(m0+m1*lyld3+m2*ldiv+m3*ldef))*(r8-(d80+d81*lyld3+d82*ldiv+d83*ldef)); eq.twenty=r9-l9*(mkt-(m0+m1*lyld3+m2*ldiv+m3*ldef))*(r9-(d90+d91*lyld3+d92*ldiv+d93*ldef)); eq.twentyone=r10-l10*(mkt-(m0+m1*lyld3+m2*ldiv+m3*ldef))*(r10-(d100+d101*lyld3+d102*ldiv+d103*ldef)); fit one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone/gmm kernel=(bartlett,4,0); test l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, /wald; run;