/*======================================================== * This SAS macro can be used to generate QQ-plot. * * dataname: name of the data set * response: respose in the regression model * varlist: list of factors * outname: name of the output dataset * * Example: *------------------------------------------------ data filter; do D = -1 to 1 by 2; do C = -1 to 1 by 2; do B = -1 to 1 by 2; do A = -1 to 1 by 2; input y @@; AB=A*B; AC=A*C; AD=A*D; BC=B*C; BD=B*D; CD=C*D; ABC=AB*C; ABD=AB*D; ACD=AC*D; BCD=BC*D; ABCD=ABC*D; output; end; end; end; end; datalines; 45 71 48 65 68 60 80 65 43 100 45 104 75 86 70 96 ; goptions colors = (none); %qqplot(filter, y, A B C D AB AC AD BC BD CD ABC ABD ACD BCD ABCD); *------------------------------------------------ * * Peng Zeng, Auburn University * 07-03-2007 *=========================================================*/ %macro qqplot(dataname, response, varlist, outname=effects); /* use PROC REG to obtain effects */ proc reg noprint outest = effect1 data = &dataname; model &response = &varlist; run; data effect2; set effect1; drop &response intercept _RMSE_; proc transpose data = effect2 out = effect3; data effect4; set effect3; effect = col1 * 2; proc sort data = effect4; by effect; proc rank data = effect4 out = effectout normal = blom; var effect; ranks nquantile; proc datasets; modify effectout; rename _NAME_ = varname COL1 = regcoef; /* use PROC GLM to calculate SS3 */ proc glm noprint data = &dataname outstat = glmout; class &varlist; model &response = &varlist; data glmss3; set glmout; if _TYPE_ = 'SS3'; keep _SOURCE_ SS; proc datasets; modify glmss3; rename _SOURCE_ = varname SS = SS3; proc sort data = effectout; by varname; proc sort data = glmss3; by varname; data &outname; merge glmss3 effectout; by varname; run; proc sort data = &outname; by effect; proc print data = &outname; proc gplot data = &outname; plot effect * nquantile = varname; run; %mend qqplot;