* ===================================================================================================== ; * Row data file; %let yfile=F:\drr2k\ed351\megdata.dat; * corresponding array of time observations ; %let tfile=F:\drr2k\ed351\megtdata.dat; * Output Datum data file; %let Indfile=F:\drr2k\ed351\megdatadatum.dat; * Largest number of entries for any individual in time array; %let tn=5; * Exogenous variable indicator ; %let w=0; %macro row2ind; %if &w=0 %then %do; data Y; infile "&yfile"; input id y1-y&tn; run; %end; %if &w^=0 %then %do; data Y; infile "&yfile"; input id y1-y&tn w; run; %end; data T; infile "&tfile"; input id t1-t&tn; run; proc sort data=Y; by id; run; proc sort data=T; by id; run; data yt_mixed; merge Y T; by id; run; data yt; set Yt_mixed; attrib _numeric_ length=8; array yy{&tn} y1-y&tn; array tt{&tn} t1-t&tn; case = _n_; do i = 1 to &tn; attrib y time length=8; time = tt{i}; y = yy{i}; output; end; %if &w=0 %then %do; keep id y time; %end; %if &w=1 %then %do; keep id y time w; %end; run; data _null_; set yt; file "&IndFile"; %if &w=0 %then %do; put id y time; %end; %if &w=1 %then %do; put id y time w; %end; run; %mend row2ind; %row2ind;