Example 1 for PROC HPLMIXED

/****************************************************************/
/*          S A S   S A M P L E   L I B R A R Y                 */
/*                                                              */
/*    NAME: HPLMXEX1                                            */
/*   TITLE: Example 1 for PROC HPLMIXED                         */
/* PRODUCT: STAT                                                */
/*  SYSTEM: ALL                                                 */
/*    KEYS: Mixed models, BLUPs                                 */
/*   PROCS: HPLMIXED                                            */
/*    DATA:                                                     */
/*                                                              */
/*     REF: PROC HPLMIXED, EXAMPLE 1.                           */
/*    MISC:                                                     */
/****************************************************************/

   %let NCenter  = 100;
   %let NPatient = %eval(&NCenter*50);
   %let NTime    = 3;
   %let SigmaC   = 2.0;
   %let SigmaP   = 4.0;
   %let SigmaE   = 8.0;
   %let Seed     = 12345;

   data WeekSim;
      keep Gender Center Patient Time Measurement;
      array PGender{&NPatient};
      array PCenter{&NPatient};
      array PEffect{&NPatient};
      array CEffect{&NCenter};
      array GEffect{2};

      do Center = 1 to &NCenter;
         CEffect{Center} = sqrt(&SigmaC)*rannor(&Seed);
         end;

      GEffect{1} = 10*ranuni(&Seed);
      GEffect{2} = 10*ranuni(&Seed);

      do Patient = 1 to &NPatient;
         PGender{Patient} = 1 + int(2       *ranuni(&Seed));
         PCenter{Patient} = 1 + int(&NCenter*ranuni(&Seed));
         PEffect{Patient} = sqrt(&SigmaP)*rannor(&Seed);
         end;

      do Patient = 1 to &NPatient;
         Gender = PGender{Patient};
         Center = PCenter{Patient};
         Mean = 1 + GEffect{Gender} + CEffect{Center} + PEffect{Patient};
         do Time = 1 to &nTime;
            Measurement = Mean + sqrt(&SigmaE)*rannor(&Seed);
         output;
         end;
      end;
   run;



 /*----------------------------------------------------------------*/
 /*---In order to run this code in distributed mode, you need   ---*/
 /*---to set the macro variables GRIDHOST and GRIDINSTALLLOC to ---*/
 /*---resolve to appropriate values for your grid installation. ---*/
 /*----------------------------------------------------------------*/

ods exclude all;
proc hplmixed data=WeekSim blup;
   performance host="&GRIDHOST" install="&GRIDINSTALLLOC" nodes=20;
   class Gender Center Patient Time;
   model Measurement = Gender;
   random   Center / s;
   repeated Time   / sub=Patient type=un;
   parms   1.7564
          11.4555
           3.6883 11.2071
           4.5951  3.6311 12.1050;
   ods output SolutionR=BLUPs;
run;
ods exclude none;

proc sort data=BLUPs;
   by Estimate;
run;

data BLUPs; set BLUPs;
   Rank = _N_;
run;

proc print data=BLUPs;
   where ((Rank <= 5) | (Rank >= 96));
   var Center Estimate;
run;