options ps=60 ls=80 pageno=1 formdlim='_';

data seed;
input plants legume $ soil $ fung $;
cards;
 8 alfalfa      loam treated
17 alfalfa      loam treated
 5 alfalfa      loam untreated
 4 alfalfa      loam untreated
17 alfalfa      sand treated
13 alfalfa      sand treated
11 alfalfa      sand untreated
10 alfalfa      sand untreated
22 alfalfa      clay treated
20 alfalfa      clay treated
16 alfalfa      clay untreated
15 alfalfa      clay untreated
 7 red.clover   loam treated
10 red.clover   loam treated
 3 red.clover   loam untreated
 5 red.clover   loam untreated
26 red.clover   sand treated
24 red.clover   sand treated
17 red.clover   sand untreated
19 red.clover   sand untreated
34 red.clover   clay treated
32 red.clover   clay treated
32 red.clover   clay untreated
29 red.clover   clay untreated
10 sweet.clover loam treated
 9 sweet.clover loam treated
 5 sweet.clover loam untreated
 4 sweet.clover loam untreated
24 sweet.clover sand treated
24 sweet.clover sand treated
16 sweet.clover sand untreated
16 sweet.clover sand untreated
39 sweet.clover clay treated
36 sweet.clover clay treated
33 sweet.clover clay untreated
34 sweet.clover clay untreated
;

/*[ABC]*/

proc glm;
class legume soil fung;
model plants = legume|soil|fung;
run;

/*[AB][AC][BC]*/

proc glm;
class legume soil fung;
model plants = legume soil fung legume*soil legume*fung soil*fung;
run;

/*[AB][AC]*/

proc glm;
class legume soil fung;
model plants = legume soil fung legume*soil legume*fung;
run;

/*[AB][BC]*/

proc glm;
class legume soil fung;
model plants = legume soil fung legume*soil soil*fung;
run;

/*[AC][BC]*/

proc glm;
class legume soil fung;
model plants = legume soil fung legume*fung soil*fung;
run;

/*[AB][C]*/

proc glm;
class legume soil fung;
model plants = legume soil fung legume*soil;
run;

/*[AC][B]*/

proc glm;
class legume soil fung;
model plants = legume soil fung legume*fung;
run;

/*[BC][A]*/

proc glm;
class legume soil fung;
model plants = legume soil fung soil*fung;
run;

/*[A][B][C]*/

proc glm;
class legume soil fung;
model plants = legume soil fung;
run;

/*[AB][C]: further analysis*/
/* comparing the levels of legume (Factor C) */

proc glm;
class legume soil fung;
model plants = legume|soil|fung; /* full model */
lsmeans fung/pdiff cl;
run;

/*[AB][C]: further analysis*/
/* looking at the interaction between legume and soil */
/* remember that SAS alphabetises the levels of soil; clay is first. */

proc glm;
class legume soil fung;
model plants = legume|soil|fung; /* full model */
estimate 'alf_red for clay' legume -1 1 0 legume*soil -1 0 0 1 0 0 0 0 0;
estimate 'alf_sweet for clay' legume -1 0 1 legume*soil -1 0 0 0 0 0 1 0 0;
estimate 'red_sweet for clay' legume 0 -1 1 legume*soil 0 0 0 -1 0 0 1 0 0;

estimate 'alf_red for loam' legume -1 1 0 legume*soil 0 -1 0 0 1 0 0 0 0;
estimate 'alf_sweet for loam' legume -1 0 1 legume*soil 0 -1 0 0 0 0 0 1 0;
estimate 'red_sweet for loam' legume 0 -1 1 legume*soil 0 0 0 0 -1 0 0 1 0;

estimate 'alf_red for sand' legume -1 1 0 legume*soil 0 0 -1 0 0 1 0 0 0;
estimate 'alf_sweet for sand' legume -1 0 1 legume*soil 0 0 -1 0 0 0 0 0 1;
estimate 'red_sweet for sand' legume 0 -1 1 legume*soil 0 0 0 0 0 -1 0 0 1;
run;