SAS PROGRAMMING HANDOUT #25 PROC IML is a interactive matrix language that contains lots of matrix functions, SAS functions, and various programming statements. This handout uses PROC IML to perform usual linear regression. DATA DRAPER; INPUT X1 X2 X3 X4 Y; CARDS; 7 26 6 60 78.5 1 29 15 52 74.3 11 56 8 20 104.3 11 31 8 47 87.6 7 52 6 33 95.9 11 55 9 22 109.2 3 71 17 6 102.7 1 31 22 44 72.5 2 54 18 22 93.1 21 47 4 26 115.9 1 40 23 34 83.8 11 66 9 12 113.3 10 68 8 12 109.4 PROC IML; USE DRAPER; READ ALL INTO XX; *this makes a matrix out of a data set; Y=XX[,5]; N=NROW(XX); R=NCOL(XX); ONE=SHAPE(1,N,1); X=ONE||XX[,1:4]; BETA=INV(X`*X)*X`*Y; SIGMA=SQRT((Y-X*BETA)`*(Y-X*BETA)/(N-R)); SE=SIGMA*SQRT(VECDIAG(INV(X`*X))); TVALUE=BETA/SE; PVALUE=(1-PROBT(ABS(TVALUE),N-R))*2; FINAL=BETA||SE||TVALUE||PVALUE; PRINT FINAL (|colname={ESTIMATE SE TVALUE PVALUE} rowname={INTERCPT X1 X2 X3 X4} FORMAT=8.4|); CREATE LAST FROM FINAL; *this creates a SAS data set from a matrix; APPEND FROM FINAL; PROC PRINT DATA=LAST; RUN; PROC REG DATA=DRAPER; MODEL Y=X1 X2 X3 X4; RUN; FINAL ESTIMATE SE TVALUE PVALUE INTERCPT 62.4054 70.0710 0.8906 0.3991 X1 1.5511 0.7448 2.0827 0.0708 X2 0.5102 0.7238 0.7049 0.5009 X3 0.1019 0.7547 0.1350 0.8959 X4 -0.1441 0.7091 -0.2032 0.8441 OBS COL1 COL2 COL3 COL4 1 62.4054 70.0710 0.89060 0.39913 2 1.5511 0.7448 2.08266 0.07082 3 0.5102 0.7238 0.70486 0.50090 4 0.1019 0.7547 0.13503 0.89592 5 -0.1441 0.7091 -0.20317 0.84407