LOG TO ILLUSTRATE "REMOVING PROJECTIONS" USING DATA-STEP CALCULATIONS IN SAS. ================================================= 10/10/08 data meatmat; set home.meat (keep=pbe cbe dinc cfo rdinc); proc means data=meatmat mean; output out = meatavg mean= pbem cbem dincm cfom rdincm; run; proc print data=meatavg; run; Obs _TYPE_ _FREQ_ pbem cbem dincm cfom rdincm 1 0 17 69.0588 53.0882 44.6235 91.0059 68.6529 meatmat1 = 17 x 5 matrix with columns pbe, cbe, dinc, cfo, rdinc obtained by substracting mean from each column data auxm (drop=i); set meatavg (drop=_TYPE_ _FREQ_); do i=1 to 17; output; end; run; data meatmat1; merge meatmat auxm; pbe1=pbe-pbem; cbe1=cbe-cbem; dinc1=dinc-dincm; cfo1=cfo-cfom; rdinc1=rdinc-rdincm; prod12= pbe1*cbe1; prod32=dinc1*cbe1; prod42= cfo1*cbe1; prod52=rdinc1*cbe1; cbe1sq=cbe1**2; run; /* Now we remove projection on cbe */ proc means data=meatmat1 mean; var prod12 prod32 prod42 prod52 cbe1sq; output out=coeffs mean= m12 m32 m42 m52 m22; data auxm2 (keep=b1 b3 b4 b5); set coeffs (drop=_TYPE_ _FREQ_); b1=m12/m22; b3=m32/m22; b4=m42/m22; b5=m52/m22; do i=1 to 17; output; end; run; data meatmat2; merge meatmat1 (keep=pbe1 cbe1 dinc1 cfo1 rdinc1) auxm2 (keep=b1 b3 b4 b5); pbe2 = pbe1-b1*cbe1; dinc2= dinc1-b3*cbe1; cfo2 = cfo1-b4*cbe1; rdinc2=rdinc1-b5*cbe1; proc corr data=meatmat2; var pbe2; with dinc2 cfo2 rdinc2; run; Pearson Correlation Coefficients, N = 17 Prob > |r| under H0: Rho=0 pbe2 dinc2 -0.65996 0.0039 cfo2 -0.69039 0.0022 rdinc2 -0.49545 0.0431 COMPARE WITH proc corr data=meatmat; var pbe; with dinc cfo rdinc; partial cbe; run; Pearson Partial Correlation Coefficients, N = 17 Prob > |r| under H0: Partial Rho=0 pbe dinc -0.65996 0.0054 cfo -0.69039 0.0031 rdinc -0.49545 0.0510 OK!!