%let Obs=36; * nb of time periods; %let firms=25; * nb of cross-sections; %let factors=4; * nb of explanatory variables excluding constant term; %macro data; data base; %do t=1 %to &Obs; * This generates &Obs observations on test assets and factors; %do fa=1 %to &factors; factor&fa=.1+rannor(1); * This generates IID factors with mean 0.1; %end; %do fi=1 %to &firms; TestAsset&fi= 0 %do fa=1 %to &factors; +1*factor&fa %end; + .02*rannor(1) ; * This generates IID test assets ; %end; output; %end; data x; set base; keep %do fa=1 %to &factors; factor&fa %end; ; data y; set base; keep %do fi=1 %to &firms; TestAsset&fi %end; ; %mend; %data proc iml; use x; read all into x; use y; read all into y; start grs(alpha,x,u,Obs,firms,factors,GRS); sigmahat=u`*u/(Obs-factors-1); muhat=x[:,]`; dfc=(Obs/firms)#(Obs-firms-factors)/(Obs-factors-1); num=alpha`*inv(sigmahat)*alpha; Lambdahat=(X`*X)/Obs; scale=1-muhat`*inv(Lambdahat)*muhat; GRS=dfc#num*scale; finish GRS; Obs=nrow(y); firms=ncol(y); factors=ncol(x); mmm = shape(1,Obs,1) || X; beta=ginv(mmm)*y; u=(y-mmm*beta); alpha=beta[1,]`; run grs(alpha,x,u,Obs,firms,factors,GRS); pvalGRS=1-probf(GRS,firms,Obs-firms-factors); print GRS pvalGRS;