options nocenter ps=64 ls=80; /* Two-Way Random Effects Model */ data twoway; infile 'rantwo.dat' firstobs = 2; input seed farm yield; proc glm; /* THE OLD PROC GLM */ class seed farm; model yield = seed farm seed*farm / ss1 ss2 ss3 solution; random seed farm seed*farm / test; estimate 'grand mean' intercept 1; estimate 'farm 1' intercept 2 seed 1 1 farm 2 0 0 0 seed*farm 1 0 0 0 1 0 0 0 / divisor = 2; estimate 'farm 2' intercept 2 seed 1 1 farm 0 2 0 0 seed*farm 0 1 0 0 0 1 0 0 / divisor = 2; estimate 'farm 3' intercept 2 seed 1 1 farm 0 0 2 0 seed*farm 0 0 1 0 0 0 1 0 / divisor = 2; estimate 'farm 4' intercept 2 seed 1 1 farm 0 0 0 2 seed*farm 0 0 0 1 0 0 0 1 / divisor = 2; estimate 'seed 1 farm 1' intercept 1 seed 1 0 farm 1 0 0 0 seed*farm 1 0 0 0 0 0 0 0; estimate 'seed 2 farm 1' intercept 1 seed 0 1 farm 1 0 0 0 seed*farm 0 0 0 0 1 0 0 0; estimate 'seed 1 farm 2' intercept 1 seed 1 0 farm 0 1 0 0 seed*farm 0 1 0 0 0 0 0 0; estimate 'seed 2 farm 2' intercept 1 seed 0 1 farm 0 1 0 0 seed*farm 0 0 0 0 0 1 0 0; estimate 'seed 1 farm 3' intercept 1 seed 1 0 farm 0 0 1 0 seed*farm 0 0 1 0 0 0 0 0; estimate 'seed 2 farm 3' intercept 1 seed 0 1 farm 0 0 1 0 seed*farm 0 0 0 0 0 0 1 0; estimate 'seed 1 farm 4' intercept 1 seed 1 0 farm 0 0 0 1 seed*farm 0 0 0 1 0 0 0 0; estimate 'seed 2 farm 4' intercept 1 seed 0 1 farm 0 0 0 1 seed*farm 0 0 0 0 0 0 0 1; proc varcomp; /* THE BETTER PROC VARCOMP */ class seed farm; model yield = seed farm seed*farm; proc varcomp method=type1; class seed farm; model yield = seed farm seed*farm; proc varcomp method=ml; class seed farm; model yield = seed farm seed*farm; proc varcomp method=reml; class seed farm; model yield = seed farm seed*farm; proc mixed; /* THE NEW PROC MIXED */ class seed farm; model yield = / output = look ; random seed farm seed*farm / solution; estimate 'grand mean' intercept 1; estimate 'farm 1' intercept 2 | seed 1 1 farm 2 0 0 0 seed*farm 1 0 0 0 1 0 0 0 / divisor = 2; estimate 'farm 2' intercept 2 | seed 1 1 farm 0 2 0 0 seed*farm 0 1 0 0 0 1 0 0 / divisor = 2; estimate 'farm 3' intercept 2 | seed 1 1 farm 0 0 2 0 seed*farm 0 0 1 0 0 0 1 0 / divisor = 2; estimate 'farm 4' intercept 2 | seed 1 1 farm 0 0 0 2 seed*farm 0 0 0 1 0 0 0 1 / divisor = 2; estimate 'seed 1 farm 1' intercept 1 | seed 1 0 farm 1 0 0 0 seed*farm 1 0 0 0 0 0 0 0; estimate 'seed 2 farm 1' intercept 1 | seed 0 1 farm 1 0 0 0 seed*farm 0 0 0 0 1 0 0 0; estimate 'seed 1 farm 2' intercept 1 | seed 1 0 farm 0 1 0 0 seed*farm 0 1 0 0 0 0 0 0; estimate 'seed 2 farm 2' intercept 1 | seed 0 1 farm 0 1 0 0 seed*farm 0 0 0 0 0 1 0 0; estimate 'seed 1 farm 3' intercept 1 | seed 1 0 farm 0 0 1 0 seed*farm 0 0 1 0 0 0 0 0; estimate 'seed 2 farm 3' intercept 1 | seed 0 1 farm 0 0 1 0 seed*farm 0 0 0 0 0 0 1 0; estimate 'seed 1 farm 4' intercept 1 | seed 1 0 farm 0 0 0 1 seed*farm 0 0 0 1 0 0 0 0; estimate 'seed 2 farm 4' intercept 1 | seed 0 1 farm 0 0 0 1 seed*farm 0 0 0 0 0 0 0 1; proc print data = look;