/* Example of Three-Period Crossover MJ 32.3 */
options nocenter linesize=80 pagesize=50;
data cross;
   infile 'cross3.dat';
   input seq person p1 p2 p3;
data b; set cross;
   if seq < 3 then do;
      trt = 'A'; y = p1; carry =  0; period = 1; output;
      trt = 'B'; y = p2; carry =  1; period = 2; output;
      trt = 'A'; if seq = 2 then trt = 'B';
                 y = p3; carry = -1; period = 3; output;
   end;
   if seq > 2 then do;
      trt = 'B'; y = p1; carry =  0; period = 1; output;
      trt = 'A'; y = p2; carry = -1; period = 2; output;
      trt = 'B'; if seq = 4 then trt = 'A';
                 y = p3; carry =  1; period = 3; output;
   end;
   drop p1 p2 p3;
proc glm;
   class seq trt period person;
   model y = person(seq) trt carry period / solution;
   lsmeans trt period / stderr pdiff;
proc sort; by seq person;
proc means noprint; by seq person;
   var y;
   output out=c mean=my;
data d; set c;
   trt = 'A';
   if seq = 2 or seq = 3 then trt = 'B';
proc glm;
   class trt;
   model my = trt / ss1;
   lsmeans trt / stderr pdiff;
proc mixed data = b;
   class trt seq period person;
   model y = trt carry period / ddfm = satterth;
   random person(seq);
   lsmeans trt period / pdiff;
