%MACRO sim(lam,n=100,nsim=100,nvar=20); %LET RHS = ; %DO i = 1 %TO &nvar; %LET RHS = &RHS X&i; %END; %DO i = 1 %TO &nvar; %LET beta&i = 0; %END; %let beta1=1; %let beta2=2; %let beta10=5; %LET FITS = ; %DO i = 1 %TO ≁ %LET FITS = &FITS FIT&i; %END; %DO m = 1 %TO ≁ DATA ds; DO i=1 TO &n; %DO j=1 %TO &nvar; X&j = RANUNI(0); %END; y = 1*X1 + 2*X2 + 5*X10 + RANNOR(0); OUTPUT; END; DROP i; RUN; PROC REG data=ds ridge=&lam OUTEST=FIT&m NOPRINT; MODEL y = &RHS; RUN; QUIT; %END; DATA results; SET &FITS; RUN; PROC SORT DATA=results; BY _TYPE_; RUN; %LET mean = ; %LET var = ; %DO i = 1 %TO &nvar; %LET mean = &mean mean&i; %LET var = &var var&i; %END; PROC UNIVARIATE DATA=RESULTS NOPRINT; BY _TYPE_; OUTPUT OUT=summ1 mean=&mean var=&var; VAR &RHS; RUN; DATA summ2; SET summ1; %DO i=1 %TO &nvar; Bias&i = Mean&i - &&Beta&i; BiasSq&i = Bias&i**2; %END; TotalBias = Sum(of BiasSq:); TotalVar = Sum(of Var:); MSE = TotalBias + TotalVar; KEEP _TYPE_ TotalBias TotalVar MSE; RUN; %MEND; %sim(0.1); PROC PRINT DATA=Summ2; RUN;