Sure. Of course.
data have;
input studyID visit_type $ visitdatetime $40.;
cards;
1 ED 05-22-2018 10:10:00
1 Hospital 06-27-2019 11:00:19
2 Hospital 01-16-2020 12:17:34
2 ED 06-24-2020 08:14:36
3 ED 09-24-2020 09:30:41
3 Hospital 09-24-2020 11:47:12
3 ED 01-10-2021 12:00:01
3 Hospital 09-24-2022 11:47:12
4 ED 07-16-2019 04:45:36
4 ED 12-22-2020 08:17:40
5 Hospital 06-19-2021 09:12:22
;
data have;
set have;
by studyID;
if first.studyID then n=0;
n+1;
run;
proc sql noprint;
select max(n) into :n separated by ' '
from (select count(*) as n from have group by studyID);
select ceil(max(n)/2) into :n2 separated by ' '
from (select count(*) as n from have group by studyID);
select distinct catt('have(where=(n=',n,')
rename=(visit_type=visit_type_',n,' visitdatetime=visitdatetime_',n,'))')
into :merge separated by ' '
from have ;
quit;
data temp;
merge &merge.;
by studyID;
drop n;
run;
data want;
set temp;
array x{*} visit_type:;
array y{*} ED_before_Hosp1-ED_before_Hosp&n2. ;
n=0;
do i=1 to dim(x) by 2;
n+1;
if i+1<=dim(x) then do;
if x{i}='ED' and x{i+1}='Hospital' then y{n}=1;
else y{n}=0;
end;
end;
drop n i;
run;
... View more