@shoeGirl32 :
If you had looked at my solution, you'd have realized that this is what the DATA _NULL_ step does; It first determined the maximum number of the elements in the variable list and then auto-composes it in the required order.
If you are spooked by the hash object approach and prefer something more traditional, you can achieve the same as shown below. But no matter which approach you take, you will need to employ some method of auto-composing the list in the requisite variable order.
data one ;
input id ;
cards ;
4
3
1
0
2
run ;
data two ;
input id startDate endDate ;
cards ;
3 31 32
2 21 22
3 33 34
2 23 24
1 11 12
3 35 36
run ;
proc sql ;
create table sone as select * from one order id ;
create table stwo as select * from two order id ;
quit ;
data _null_ ;
do q = 1 by 1 until (last.id) ;
set stwo end = z ;
by id ;
end ;
_iorc_ = _iorc_ max q ;
if z ;
length s $ 32767 ;
do q = 1 to _iorc_ ;
s = catx (" ", s, cats ("startDate", q), cats ("endDate", q)) ;
end ;
call symputx ("s", s) ;
run ;
data want ;
do _n_ = 0 by 2 until (last.id) ;
merge sone (in = one) stwo (in = two) ;
by id ;
if one and two ;
array dd [*] &s ;
dd [_n_ + 1] = startDate ;
dd [_n_ + 2] = endDate ;
end ;
run ;
Kind regards
Paul D.
... View more