We will use a data set called hsb2.sas7bdat to demonstrate.
Example 1: One-way ANOVA
The dependent variable is write and the factor variable is ses which has three levels.
proc glm data= hsb2; class ses; model write = ses /solution; run; quit;Standard Parameter Estimate Error t Value Pr > |t|Intercept 55.91379310 B 1.22049134 45.81 <.0001 SES 1 -5.29677183 B 1.82423349 -2.90 0.0041 SES 2 -3.98747731 B 1.54888301 -2.57 0.0108 SES 3 0.00000000 B . . .
An estimate statement corresponds to an L-matrix, which corresponds to a linear combination of the parameter estimates. With this simple model, we have three parameters, the intercept and two parameters for ses =1 and ses =2. Group of ses =3 is the reference group. The regression equation is the following, where ses1 is the dummy variable for ses =1 and ses2 is the dummy variable for ses =2.
write = intercept + b_1*ses1 + b_2*ses2.
The parameter for the intercept is the expected cell mean for ses =3 since it is the comparison group. The parameter for ses1 is the difference of the mean for cell ses =1 and the cell ses =3. To get the expected mean for ses = 1, we will add the coefficient for ses1 to the intercept. Similarly, we will get the expected mean for ses = 2 by adding the intercept to the coefficient for ses = 2. The difference between the mean of cell ses = 1 and cell ses = 2 will be the difference of b_1 and b_2.
Beside using the solution option to get the parameter estimates, we can also use the option "e" following the estimate statement to get the L matrix.
proc glm data= hsb2; class ses; model write = ses /solution; estimate 'ses 1' intercept 1 ses 1 0 0 /e; /*cell mean for ses = 1*/ estimate 'ses 2' intercept 1 ses 0 1 0; /*cell mean for ses = 2*/ estimate 'ses 3' intercept 1 ses 0 0 1; /*cell mean for ses = 3*/ estimate 'ses 1 vs 2' ses 1 -1 0; estimate 'ses 1 vs 3' ses 1 0 -1; estimate 'ses 2 vs 3' ses 0 1 -1; estimate 'ses 1 and 2 vs 3' ses .5 .5 -1; run; quit;Coefficients for Estimate ses 1Row 1Intercept 1SES 1 1 SES 2 0 SES 3 0 Standard Parameter Estimate Error t Value Pr > |t| ses 1 50.6170213 1.35581293 37.33 <.0001 ses 2 51.9263158 0.95364536 54.45 <.0001 ses 3 55.9137931 1.22049134 45.81 <.0001 ses 1 vs 2 -1.3092945 1.65760917 -0.79 0.4306 ses 1 vs 3 -5.2967718 1.82423349 -2.90 0.0041 ses 2 vs 3 -3.9874773 1.54888301 -2.57 0.0108 ses 1 and 2 vs 3 -4.6421246 1.47530206 -3.15 0.0019 Standard Parameter Estimate Error t Value Pr > |t| Intercept 55.91379310 B 1.22049134 45.81 <.0001 SES 1 -5.29677183 B 1.82423349 -2.90 0.0041 SES 2 -3.98747731 B 1.54888301 -2.57 0.0108 SES 3 0.00000000 B . . .
Example 2: Two-way ANOVA, main effects only
proc glm data= hsb2; class ses female ; model write = ses female /solution; estimate 'ses 1 and female 0' intercept 1 ses 1 0 0 female 1 0 /e; estimate 'ses 2 and female 0' intercept 1 ses 0 1 0 female 1 0; estimate 'ses 3 and female 0' intercept 1 ses 0 0 1 female 1 0; estimate 'ses 1 and female 1' intercept 1 ses 1 0 0 female 0 1; estimate 'ses 2 and female 1' intercept 1 ses 0 1 0 female 0 1; estimate 'ses 3 and female 1' intercept 1 ses 0 0 1 female 0 1; estimate 'ses 1 vs 2' ses 1 -1 0; estimate 'ses 1 vs 3' ses 1 0 -1; estimate 'ses 2 vs 3' ses 0 1 -1; estimate 'averaging across level of female at ses = 1' intercept 1 ses 1 0 0 /e; run; quit;Coefficients for Estimate ses 1 and female 0 Row 1 Intercept 1 SES 1 1 SES 2 0 SES 3 0 FEMALE 0 1 FEMALE 1 0Coefficients for Estimate averaging across level of female at ses = 1 Row 1 Intercept 1 SES 1 1 SES 2 0 SES 3 0 FEMALE 0 0.5 FEMALE 1 0.5Standard Parameter Estimate Error t Value Pr > |t| ses 1 and female 0 46.9599907 1.56788763 29.95 <.0001 ses 2 and female 0 49.2124141 1.12199872 43.86 <.0001 ses 3 and female 0 53.2281612 1.33618828 39.84 <.0001 ses 1 and female 1 52.3312544 1.36505131 38.34 <.0001 ses 2 and female 1 54.5836778 1.11425673 48.99 <.0001 ses 3 and female 1 58.5994250 1.33618828 43.86 <.0001 ses 1 vs 2 -2.2524235 1.60796178 -1.40 0.1629 ses 1 vs 3 -6.2681706 1.76744072 -3.55 0.0005 ses 2 vs 3 -4.0157471 1.48770056 -2.70 0.0076 averaging across level of female at ses = 1 49.6456225 1.32273692 37.53 <.0001 Standard Parameter Estimate Error t Value Pr > |t| Intercept 58.59942496 B 1.33618828 43.86 <.0001 SES 1 -6.26817058 B 1.76744072 -3.55 0.0005 SES 2 -4.01574712 B 1.48770056 -2.70 0.0076 SES 3 0.00000000 B . . . FEMALE 0 -5.37126371 B 1.28247478 -4.19 <.0001 FEMALE 1 0.00000000 B . . .
Example 3: Two-way ANOVA with interaction
proc glm data= hsb2; class ses female ; model write = ses|female /solution; estimate 'ses 1 and female 1' intercept 1 ses 1 0 0 female 0 1 ses*female 0 1 0 0 0 0; estimate 'ses 2 and female 1' intercept 1 ses 0 1 0 female 0 1 ses*female 0 0 0 1 0 0; estimate 'ses 3 and female 1' intercept 1 ses 0 0 1 female 0 1 ses*female 0 0 0 0 0 1; estimate 'ses 1 and female 0' intercept 1 ses 1 0 0 female 1 0 ses*female 1 0 0 0 0 0; estimate 'ses 2 and female 0' intercept 1 ses 0 1 0 female 1 0 ses*female 0 0 1 0 0 0; estimate 'ses 3 and female 0' intercept 1 ses 0 0 1 female 1 0 ses*female 0 0 0 0 1 0;estimate 'ses 1 vs 2 at female = 0' ses 1 -1 0 ses*female 1 0 -1 0 0 0; estimate 'ses 1 vs 3 at female = 0' ses 1 0 -1 ses*female 1 0 0 0 -1 0; estimate 'ses 2 vs 3 at female = 0' ses 0 1 -1 ses*female 0 0 1 0 -1 0;estimate 'ses 1 vs 2 at female = 1' ses 1 -1 0; estimate 'ses 1 vs 3 at female = 1' ses 1 0 -1; estimate 'ses 2 vs 3 at female = 1' ses 0 1 -1;estimate 'female 0 vs 1 at ses = 1' female 1 -1 ses*female 1 -1 0 0 0 0; estimate 'female 0 vs 1 at ses = 2' female 1 -1 ses*female 0 0 1 -1 0 0; estimate 'female 0 vs 1 at ses = 3' female 1 -1 ses*female 0 0 0 0 1 -1; run; quit;
Example 4: Three-way ANOVA with main effects only
proc glm data= hsb2; class ses female prog; model write = ses female prog /solution; estimate 'ses 1, female 0 and prog 1' intercept 1 ses 1 0 0 female 1 0 prog 1 0 0/e; estimate 'ses 2, female 0 and prog 2' intercept 1 ses 0 1 0 female 1 0 prog 0 1 0; estimate 'ses 3, female 1 and prog 1' intercept 1 ses 0 0 1 female 0 1 prog 1 0 0; estimate 'ses 1 and female 0' intercept 1 ses 1 0 0 female 1 0 /e; /*averaging across all levels of prog*/ estimate 'ses 2 and female 0' intercept 1 ses 0 1 0 female 1 0 ; estimate 'ses 3 and female 0' intercept 1 ses 0 0 1 female 1 0; estimate 'ses 1 vs 2' ses 1 -1 0 /e; /*the difference is the same across any levels of female or prog since this is a marginal effect model.*/ estimate 'ses 1 vs 3' ses 1 0 -1; estimate 'ses 2 vs 3' ses 0 1 -1; run; quit;