Thanks, your solution appear to work. As a followup. I took your code and present a modified version here
options missing= .;
data have;
input ln
setup_dt :mmddyy10.
step :$3.
step_dt :mmddyy10.
rem_dt :mmddyy10.;
format setup_dt step_dt rem_dt mmddyy10.;
cards;
1 08/15/2018 550 10/11/2018 12/05/2018
1 08/15/2018 552 09/12/2019 11/05/2019
1 06/11/2019 550 06/11/2019 08/02/2019
;run;
proc sort data= have;by ln step;run;
data v / view = v ;
do q = 1 by 1 until (last.step) ;
set have ;
by ln step ;
output ;
end ;
run ;
data _null_ ;
if 0 then set have ;
dcl hash h (dataset:"have") ;
h.definekey ("step") ;
h.definedone () ;
dcl hiter i ("h") ;
call execute ("data hav2(drop=q); merge") ;
do while (i.next() = 0) ;
call execute (cats ("v (where=(step='", step, "') rename=step_dt=_", step, ")")) ;
end ;
call execute ("; by ln q; run;") ;
stop ;
run ;
Output here
ln
setup_dt
step
_550
_552
rem_dt
1
08/15/2018
552
10/11/2018
09/12/2019
11/05/2019
1
06/11/2019
550
06/11/2019
08/02/2019
Is there a way to loop horizontally and show the month between setup_dt and rem_dt For example show Aug2018,Sep2018,Oct2018,until Nov2019 for row one. The dates can be shown as a text field, then place a 1 if the condition is true. Something like this
ln
setup_dt
step
_550
_552
rem_dt
Aug-18
30-Sep
18-Oct
loop until Nov 2019
1
08/15/2018
552
10/11/2018
09/12/2019
11/05/2019
1
1
1
1
06/11/2019
550
06/11/2019
08/02/2019
1
1
1
loop until 8/2019
... View more