Using the FLATDATA Statement

/*--------------------------------------------------------------

                    SAS Sample Library

        Name: panex06.sas
 Description: Example program from SAS/ETS User's Guide,
              The PANEL Procedure
       Title: Using the FLATDATA Statement
     Product: SAS/ETS Software
        Keys: panel data
        PROC: PANEL
       Notes:

--------------------------------------------------------------*/

data flattest;
   seed = 111323;
   do i = 1 to 20;
      X_1 =   rannor(seed);
      X_2 =   rannor(seed);
      X_3 =   rannor(seed);
      X_4 =   rannor(seed);
      X_5 =   rannor(seed);
      X_6 =   rannor(seed);
      Y_1 =   i +  rannor(seed) + X_1 * 2;
      Y_2 =   i +  rannor(seed) + X_2 * 2;
      Y_3 =   i +  rannor(seed) + X_3 * 2;
      Y_4 =   i +  rannor(seed) + X_4 * 2;
      Y_5 =   i +  rannor(seed) + X_5 * 2;
      Y_6 =   i +  rannor(seed) + X_6 * 2;
      cs = cat("CS",i);
      num = rannor(seed);
      output;
   end;
run;


proc print data=flattest(obs=5);
   var i cs num X_1 X_2 X_3 X_4 X_5 X_6 Y_1 Y_2 Y_3 Y_4 Y_5 Y_6;
run;

proc panel data=flattest;
   flatdata indid=i tsname="t" base=(X Y)
            keep=( cs num seed )  / out=flat_out;
   id i t;
   model y = x / fixone noint;
run;

proc print data=flat_out(obs=6);
   var i t X Y cs num;
run;

data wide;
   set flat_out;
   by i;
   keep i num cs X_1-X_6 Y_1-Y_6;
   retain X_1-X_6 Y_1-Y_6;
   array ax(1:6) X_1-X_6;
   array ay(1:6) Y_1-Y_6;
   if first.i then do;
      do j = 1 to 6;
         ax(j) = 0;
         ay(j) = 0;
      end;
   end;
   ax(t) = X;
   ay(t) = Y;
   if last.i then output;
run;

proc print data=wide(obs=5);
   var i cs num X_1 X_2 X_3 X_4 X_5 X_6 Y_1 Y_2 Y_3 Y_4 Y_5 Y_6;
run;