/*********************************************** SAS EXAMPLE 6 -- ANOVA USING GLM PROCS USED: PROC MEANS PROC FREQ PROC TTEST PROC GLM PROC PLOT PROC UNIVARIATE FILENAME: ANOVA.SAS ************************************************/ OPTIONS NODATE FORMDLIM=" " PAGENO=1 LABEL; TITLE; PROC FORMAT; VALUE AGEFMT 1 = "1: <25" 2 = "2: 25-32" 3 = "3: 32-41" 4 = "4: >=42"; VALUE LOWHIFMT 0 = "0: LOW" 1 = "1: HIGH"; VALUE PILLFMT 1 = "1: NO PILL" 2 = "2: PILL"; VALUE WTFMT 1 = "1: LOW" 2 = "2: MEDIUM" 3 = "3: HIGH"; RUN; DATA WERNER; INFILE "C:\TEMP\LABDATA\WERNER2.DAT"; INPUT ID $ 1-4 AGE 5-8 HT 9-12 WT 4. PILL 4. CHOL 4. ALB 25-28 1 CALC 29-32 1 URIC 33-36 1 PAIR 37-39; IF HT = 999 THEN HT=.; IF WT = 999 THEN WT=.; IF ALB = 99 THEN ALB=.; IF CALC= 99 THEN CALC=.; IF URIC= 99 THEN URIC=.; IF CHOL >= 400 OR CHOL < 100 THEN CHOL=.; IF AGE NOT = . THEN DO; IF AGE < 25 THEN AGEGRP = 1; IF AGE >= 25 AND AGE < 32 THEN AGEGRP = 2; IF AGE >= 32 AND AGE < 42 THEN AGEGRP = 3; IF AGE >= 42 THEN AGEGRP = 4; AGEDUM1=(AGEGRP=1); AGEDUM2=(AGEGRP=2); AGEDUM3=(AGEGRP=3); AGEDUM4=(AGEGRP=4); IF AGE < 42 THEN HIAGE=0; IF AGE >=42 THEN HIAGE=1; END; AGEPILL=10*PILL+AGEGRP; IF CHOL NOT = . THEN DO; CHOLCAT = 0; IF CHOL GE 201 THEN CHOLCAT = 1; END; IF URIC NOT = . THEN DO; IF URIC < 5.3 THEN URICAT = 0; IF URIC >= 5.3 THEN URICAT = 1; END; IF WT NOT=. THEN DO; IF WT <= 120 THEN WTCAT=1; IF WT > 120 AND WT <= 137 THEN WTCAT=2; IF WT > 137 THEN WTCAT=3; END; RUN; PROC DATASETS LIB=WORK; MODIFY WERNER; FORMAT PILL PILLFMT. AGEGRP AGEFMT. HIAGE URICAT CHOLCAT LOWHIFMT.; RUN; PROC CONTENTS DATA=WERNER; TITLE "PROC CONTENTS SHOWS FORMATS ASSIGNED TO VARIABLES"; RUN; PROC MEANS DATA=WERNER; TITLE "DESCRIPTIVE STATISTICS"; RUN; PROC FREQ DATA=WERNER; TABLES PILL AGEGRP HIAGE PILL*AGEGRP AGEPILL URICAT CHOLCAT; TITLE "FREQUENCIES FOR CATEGORICAL VARIABLES"; RUN; PROC GLM DATA=WERNER; CLASS AGEGRP; MODEL CHOL = AGEGRP; TITLE "ONEWAY ANOVA OF CHOLESTEROL ON AGEGROUP"; RUN; QUIT; PROC GLM DATA=WERNER; CLASS AGEGRP; MODEL CHOL = AGEGRP / SOLUTION; run; MEANS AGEGRP / HOVTEST = LEVENE WELCH; MEANS AGEGRP / BON SCHEFFE TUKEY; TITLE "ONEWAY ANOVA OF CHOLESTEROL ON AGEGROUP"; TITLE2 "WITH DIFFERENT UNEQUAL VARIANCES ANOVA AND POST-HOC TESTS"; TITLE3 "PARAMETER ESTIMATES ARE GOTTEN WITH SOLUTION OPTION"; RUN; QUIT; PROC REG DATA=WERNER; MODEL CHOL = AGEDUM1 AGEDUM2 AGEDUM3; TITLE "REGRESSION: DOES NOT HAVE CLASS STATEMENT"; TITLE2 "DUMMY VARIABLES NEED TO BE CREATED IN DATA STEP"; TITLE3 "PARAMETER ESTIMATES ARE AUTOMATICALLY GENERATED"; RUN; PROC TTEST DATA=WERNER; CLASS URICAT; VAR CHOL; TITLE "TWO-SAMPLE t-TEST: COMPARE WITH ANOVA IN NEXT EXAMPLE"; RUN; PROC GLM DATA=WERNER; CLASS URICAT; MODEL CHOL = URICAT; MEANS URICAT / HOVTEST = LEVENE WELCH; OUTPUT OUT=OUTGLM1 P=PREDICT1 R=RESID1; TITLE "ONEWAY ANOVA -- SAME AS TWO-SAMPLE T-TEST"; TITLE2 "WHEN THE CLASS VARIABLE HAS ONLY 2 CATEGORIES"; RUN; QUIT; PROC PRINT DATA=OUTGLM1(OBS=12); VAR ID CHOL URICAT PREDICT1 RESID1; TITLE "PRINTOUT OF PREDICTED AND RESIDUALS FROM ANOVA"; RUN; PROC PLOT DATA=OUTGLM1; PLOT RESID1 * PREDICT1; TITLE "PLOT OF RESIDUAL VS. PREDICTED FROM ANOVA"; RUN; QUIT; PROC GLM DATA=WERNER; CLASS AGEGRP PILL; MODEL CHOL = AGEGRP PILL AGEGRP*PILL; MEANS AGEGRP PILL AGEGRP*PILL; LSMEANS AGEGRP PILL; LSMEANS AGEGRP*PILL / PDIFF ADJUST=TUKEY SLICE=AGEGRP SLICE=PILL; TITLE "TWO-WAY ANOVA WITH INTERACTION"; TITLE2 "AND POST-HOC TEST ON INTERACTION"; RUN;QUIT; PROC GLM DATA=WERNER; CLASS AGEPILL; MODEL CHOL = AGEPILL; MEANS AGEPILL; TITLE "ONEWAY ANOVA ON COMBINED VARIABLE"; RUN;QUIT; PROC GLM DATA=WERNER; CLASS AGEGRP URICAT PILL; MODEL CHOL = URICAT | AGEGRP | PILL / SS1 SS2 SS3; TITLE "THREE-WAY ANOVA WITH ALL POSSIBLE INTERACTIONS"; RUN; QUIT; PROC GLM; CLASS AGEGRP URICAT PILL; MODEL CHOL = URICAT |AGEGRP |PILL @2; TITLE "THREE-WAY ANOVA WITH TWOWAY INTERACTIONS AND MAIN EFFECTS"; RUN; QUIT; PROC GLM; CLASS AGEGRP URICAT PILL; MODEL CHOL = URICAT AGEGRP PILL AGEGRP*URICAT; TITLE "THREE-WAY ANOVA WITH ONE TWOWAY INTERACTION AND MAIN EFFECTS"; RUN; QUIT; PROC GLM; CLASS AGEGRP URICAT PILL; MODEL CHOL = URICAT AGEGRP PILL; OUTPUT OUT=OUTGLM2 P=PREDICT2 R=RESID2; TITLE "THREE-WAY ANOVA WITH MAIN EFFECTS ONLY"; RUN; QUIT; PROC PLOT DATA=OUTGLM2; PLOT RESID2 * PREDICT2 = "*"; TITLE "PLOT OF RESIDUALS VS. PREDICTED"; RUN; QUIT; PROC UNIVARIATE PLOT NORMAL DATA=OUTGLM2; VAR RESID2; TITLE "CHECKING NORMALITY OF RESIDUALS"; RUN; PROC GLM DATA=WERNER; CLASS AGEGRP PILL; MODEL CHOL = AGEGRP WT AGEGRP*WT / SS1 SS2 SS3; MEANS AGEGRP; LSMEANS AGEGRP; TITLE "ANALYSIS OF COVARIANCE--COVARIATE IS UNCENTERED"; RUN; QUIT; PROC MEANS DATA=WERNER; VAR WT; TITLE "AVERAGE WEIGHT FOR ALL CASES"; RUN; PROC STANDARD MEAN=0 DATA=WERNER OUT=STDDATA; VAR WT; RUN; PROC MEANS DATA=STDDATA; VAR WT; TITLE "CENTERED WEIGHT"; RUN; PROC GLM DATA=STDDATA; CLASS AGEGRP PILL; MODEL CHOL = AGEGRP WT AGEGRP*WT / SS1 SS2 SS3; MEANS AGEGRP; LSMEANS AGEGRP ; TITLE "ANALYSIS OF COVARIANCE--COVARIATE IS CENTERED"; RUN; QUIT; PROC GLM DATA=STDDATA; CLASS AGEGRP PILL; MODEL CHOL = AGEGRP WT/SOLUTION; TITLE "ANCOVA--COVARIATE IS CENTERED"; TITLE2 "MAIN EFFECTS ONLY"; RUN;QUIT; PROC REG DATA= STDDATA; MODEL CHOL = AGEDUM1 AGEDUM2 AGEDUM3 WT; TITLE "REGRESSION MODEL TO GET ANCOVA"; TITLE2 "SOLUTION FOR PARAMETER ESTIMATES IS AUTOMATICALLY CREATED"; RUN; QUIT;