options nocenter ps=50 ls=79;	/* strip plot MJ 25 */

data split;			/* nitro & irrig randomize in MJ Table 25.2 */
   input set nitro i1 i2;
   datalines;
1 1 55 71
1 3 69 78
1 2 62 77
2 3 81 77
2 1 77 63
2 2 79 66
3 2 70 78
3 3 79 80
3 1 63 77
4 3 76 79
4 2 66 76
4 1 65 75
;
data b; set split;
   yield = i1; irrig=1; if set = 2 then irrig=2; output;
   yield = i2; irrig=2; if set = 2 then irrig=1; output;
   drop i1--i2;

proc glm;		/* caution: stderrs below are not correct */
   class set nitro irrig;
   model yield = set nitro set*nitro irrig set*irrig nitro*irrig;
   test h = nitro e = set*nitro;
   test h = irrig e = set*irrig;
   random set set*nitro set*irrig / test;
   lsmeans nitro / pdiff stderr e = set*nitro;
   lsmeans irrig / pdiff stderr e = set*irrig;
   lsmeans irrig*nitro / pdiff stderr;

proc mixed;			/* standard errors are correct below*/
   class set nitro irrig;
   model yield = nitro | irrig;
   random set set*nitro set*irrig;
   lsmeans irrig * nitro;
   estimate 'irrig'  irrig 3 -3 nitro*irrig 1 -1 1 -1 1 -1 / df=3 divisor=3;
   estimate 'irrig at n1' irrig 1 -1 nitro*irrig 1 -1;
   estimate 'irrig at n2' irrig 1 -1 nitro*irrig 0 0 1 -1;
   estimate 'irrig at n3' irrig 1 -1 nitro*irrig 0 0 0 0 1 -1;
   estimate 'nitro 1 v 2' nitro 1 -1 0 nitro*irrig .5 .5 -.5 -.5 0 0 / df=6;
   estimate 'nitro 1 v 3' nitro 1 0 -1 nitro*irrig .5 .5 0 0 -.5 -.5 / df=6;
   estimate 'nitro 2 v 3' nitro 0 1 -1 nitro*irrig 0 0 .5 .5 -.5 -.5 / df=6;
   contrast 'nitro at i1' nitro 1 -1 0 nitro*irrig 1 0 -1 0 0 0 ,
                          nitro 1 0 -1 nitro*irrig 1 0 0 0 -1 0 / df=6;
   contrast 'nitro at i2' nitro 1 -1 0 nitro*irrig 0 1 0 -1 0 0 ,
                          nitro 1 0 -1 nitro*irrig 0 1 0 0 0 -1 / df=6;

   make 'lsmeans' out=lsm;	/* make output data set of LS means */

data plot; set lsm;		/* pull out substrings with levels */
   nitro = substr(level,13,1);
   irrig = substr(level,15,1);
proc plot data=plot;		/* interaction plot */
   plot lsmean*nitro=irrig;

