options nocenter ps=64 ls=80;	/* MJ 23: balanced and unbalanced mixed model */
data mixed;
   input machine person score1 score2 score3;
   datalines;
1 1 52 52.8 53.1
1 2 51.8 52.8 53.1
1 3 60 60.2 58.4
1 4 51.1 52.3 50.3
1 5 50.9 51.8 51.4
1 6 46.4 44.8 49.2
2 1 62.1 62.6 64
2 2 59.7 60 59
2 3 68.6 65.8 69.7
2 4 63.2 62.8 62.2
2 5 64.8 65 65.4
2 6 43.7 44.2 43
3 1 67.5 67.2 66.9
3 2 61.5 61.7 62.3
3 3 70.8 70.6 71
3 4 64.1 66.2 64
3 5 72.1 72 71.1
3 6 62 61.4 60.5
;
data bal; set mixed;
   score = score1; time=1; output;
   score = score2; time=2; output;
   score = score3; time=3; output;
   drop score1--score3;
data unbal; set bal;			/* artificially delete data */
   if machine = 1 and person = 1 and time > 1 then delete;
   if machine = 1 and person = 2 and time = 3 then delete;
   if machine = 1 and person = 3 and time > 1 then delete;
   if machine = 1 and person = 4 and time = 3 then delete;
   if machine = 2 and person = 1 and time < 3 then delete;
   if machine = 2 and person = 3 and time = 3 then delete;
   if machine = 2 and person = 5 and time = 3 then delete;

proc glm data=bal;			/* balanced case -- glm */
   class machine person;
   model score = machine person machine*person / ss3;
   random person machine*person / test;
   test h = machine e = machine*person;
   contrast 'machine 1 vs. 2' machine 6 -6 0 machine*person
      1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 / e = machine*person;
   contrast 'machine 2 vs. 3' machine 0 6 -6 machine*person
      0 0 0 0 0 0 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 / e = machine*person;
   contrast 'machine 1 vs. 3' machine 6 0 -6 machine*person
      1 1 1 1 1 1 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 / e = machine*person;

proc mixed data=bal;			/* balanced case -- mixed */
   class machine person;
   model score = machine / ddfm = satterth;
   random person machine*person;
   contrast 'machine 1 vs. 2' machine 1 -1 0;
   contrast 'machine 2 vs. 3' machine 0 1 -1;
   contrast 'machine 1 vs. 3' machine 1 0 -1;
   lsmeans machine / diffs;

proc glm data=unbal;	/* unbalanced case -- glm using Type I as in MJ 23 */
   class machine person;
   model score = machine person machine*person / e1 ss1;
   random person machine*person / test;
   test h = machine e = machine*person;
   contrast 'machine 1 vs. 2' machine 6 -6 0 machine*person
      1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 / e = machine*person;
   contrast 'machine 2 vs. 3' machine 0 6 -6 machine*person
      0 0 0 0 0 0 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 / e = machine*person;
   contrast 'machine 1 vs. 3' machine 6 0 -6 machine*person
      1 1 1 1 1 1 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 / e = machine*person;

proc glm data=unbal;	/* unbalanced case -- glm using Type III */
   class machine person;
   model score = machine person machine*person / ss3;
   random person machine*person / test;
   test h = machine e = machine*person;
   contrast 'machine 1 vs. 2' machine 6 -6 0 machine*person
      1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 / e = machine*person;
   contrast 'machine 2 vs. 3' machine 0 6 -6 machine*person
      0 0 0 0 0 0 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 / e = machine*person;
   contrast 'machine 1 vs. 3' machine 6 0 -6 machine*person
      1 1 1 1 1 1 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 / e = machine*person;

proc mixed data=unbal;	/* unbalanced case -- mixed -- the correct way! */
   class machine person;
   model score = machine / ddfm = satterth;
   random person machine*person;
   contrast 'machine 1 vs. 2' machine 1 -1 0;
   contrast 'machine 2 vs. 3' machine 0 1 -1;
   contrast 'machine 1 vs. 3' machine 1 0 -1;
   lsmeans machine / diffs;
