You can also do something like this. Just made up some data.
data have;
array names {19} $ 10 _temporary_ ('Alice', 'Barbara', 'Carol', 'Jane', 'Janet', 'Joyce', 'Judy', 'Louise', 'Mary', 'Alfred',
'Henry', 'James', 'Jeffrey', 'John', 'Philip', 'Robert', 'Ronald', 'Thomas', 'William');
do id = 1 to 3;
do date = '01jun2020'd to '10jun2020'd;
name = names[ceil(rand("Uniform")*19)];
output;
end;
end;
format date ddmmyy10.;
run;
data want(drop=rc seq m i lname);
if _N_=1 then do;
declare hash h ();
h.definekey('id', 'seq');
h.definedata('lname');
h.definedone();
do seq = 1 by 1 until (lr1);
set have end=lr1;
h.replace(key : id, key : seq, data : name);
end;
end;
array l {-3 : 3} $ 10 lag1-lag3 m lead1-lead3;
do seq = 1 by 1 until (lr2);
set have end=lr2;
do i = -3 to 3;
lname = repeat(' ', 10);
rc = h.find (key : id, key : seq + i);
l [i] = lname;
end;
output;
end;
run;
... View more