%newsas(owners); title 'Regression approach to Anova'; Data OWNERS; label OFFER = Cash OFFER for car OWNER = Owner of car SEX = Sex of OWNER AGE = Age group of OWNER; input OWNER $ SEX $ AGE $ @ ; * <-- hold the pointer; do DEALER = 1 to 6; * Read 6 observations; input OFFER @ ; * <-- read next & hold pointer; output; * Output to SAS dataset; end; list; datalines; A M OLD 25 24 26 27 23 28 B F YNG 21 25 23 22 20 22 C F OLD 26 29 27 28 29 28 D M YNG 20 23 24 26 21 23 ; title 'Neter & Wasserman, (old edition): Owner Data'; *include macros(splot); %splot(DATA=OWNERS, class=OWNER, var=OFFER); *---- One way ANOVA ----; proc glm data=OWNERS; *-- Use glm to get contrasts; class owner; model OFFER = OWNER / solution; contrast 'A-D' OWNER 1 0 0 -1; * These contrasts correspond; contrast 'B-D' OWNER 0 1 0 -1; * to the regression variables; contrast 'C-D' OWNER 0 0 1 -1; estimate 'A-D' OWNER 1 0 0 -1; * Get parameter estimates; estimate 'B-D' OWNER 0 1 0 -1; estimate 'C-D' OWNER 0 0 1 -1; run; Title2 'Regression approach (One Way)'; *-- Create dummy variables, X1-X3, 'D' as baseline level; %dummy(data=owners, var=owner, base=_last_, prefix=X, name=); /* Another way to do the same thing: data OWN1; set OWNERS; *-- Coding for Tau effects ; X1 = (owner='A') - (owner='D'); X2 = (owner='B') - (owner='D'); X3 = (owner='C') - (owner='D'); */ proc print; var OWNER SEX OFFER X1-X3; proc glm data=OWN1; *-- Note: no class stmt; model OFFER = X1-X3 / SOLUTION; run; title2 '------- Two-way ANOVA --------'; proc glm data=owners; class AGE SEX; model OFFER = AGE SEX AGE*SEX; * means AGE SEX / TUKEY; *--- Using contrasts to pull out the AGE, SEX & AGE*SEX effects; proc glm data=OWNERS; class OWNER; model OFFER = OWNER; contrast 'AGE' owner 1 -1 1 -1; contrast 'SEX' owner 1 -1 -1 1; contrast 'AGE*SEX' owner 1 1 -1 -1; *<-- the product of the AGE and SEX contrasts; Title3 'SS for two-way effects from contrasts'; run; *-------- Regression approach (Two Way)--------------; data OWN2; set owners; X1 = (age='YNG') - (age='OLD'); X2 = (sex='M') - (sex='F'); X3 = X1 * X2; *-- Interaction effect; proc print; var SEX AGE OFFER X1-X3; title3 'Regression approach'; proc glm data=OWN2; model OFFER = X1-X3 / XPX SOLUTION; *-- XPX shows orthogonality; run;