Dear,
I need flag certain OBS in the following data based on following conditions. Please help in my code.
I need to flag all avg OBS within awindow if visitwindow is not unscheduled.(OBS 2 and 4 flag='y')
If visit=unscheduled then I have to flag OBS with least diff value withinin awindow(OBS 8 flag=y)
If visit=unscheduled and diff=same then I have to flag OBS with last date (OBS 12 flag=y)
I trying the following code. Please suggest any thing I need to modify. Thanks
data
id test visitwindow awindow diff date
1 bp Day 7 (-1, +2) Wk 1 Day 4 (-1, +2) Wk 1 2 2015-05-15
1 bpavg Day 7 (-1, +2) Wk 1 Day 4 (-1, +2) Wk 1 2 2015-05-15
1 bp Day 7 (-1, +2) Wk 1 Day 4 (-1, +2) Wk 1 1 2015-05-16
1 bpavg Day 7 (-1, +2) Wk 1 Day 4 (-1, +2) Wk 1 1 2015-05-16
1 bp unscheduled Day 10 (+/-3) Wk 2 2 2015-05-25
1 bpavg unscheduled Day 10 (+/-3) Wk 2 2 2015-05-25
1 bp unscheduled Day 10 (+/-3) Wk 2 1 2015-05-26
1 bpavg unscheduled Day 10 (+/-3) Wk 2 1 2015-05-26
1 bp unscheduled Day 24&25 (+/-3) Wk 4 1 2015-06-25T11:35
1 bpavg unscheduled Day 24&25 (+/-3) Wk 4 1 2015-06-25T11:35
1 bp unscheduled Day 24&25 (+/-3) Wk 4 1 2015-06-25T12:35
1 bpavg unscheduled Day 24&25 (+/-3) Wk 4 1 2015-06-25T12:35
output needed
id test visitwindow a.window diff date flag
1 bp Day 7 (-1, +2) Wk 1 Day 4 (-1, +2) Wk 1 2 2015-05-15
1 bpavg Day 7 (-1, +2) Wk 1 Day 4 (-1, +2) Wk 1 2 2015-05-15 y
1 bp Day 7 (-1, +2) Wk 1 Day 4 (-1, +2) Wk 1 1 2015-05-16
1 bpavg Day 7 (-1, +2) Wk 1 Day 4 (-1, +2) Wk 1 1 2015-05-16 y
1 bp unscheduled Day 10 (+/-3) Wk 2 2 2015-05-25
1 bpavg unscheduled Day 10 (-1, +2) Wk 1 2 2015-05-25
1 bp unscheduled Day 10 (+/-3) Wk 2 1 2015-05-26
1 bpavg unscheduled Day 10 (+/-3) Wk 2 1 2015-05-26 y
1 bp unscheduled Day 24&25 (+/-3) Wk 4 1 2015-06-25T11:35
1 bpavg unscheduled Day 24&25 (+/-3) Wk 4 1 2015-06-25T11:35
1 bp unscheduled Day 24&25 (+/-3) Wk 4 1 2015-06-25T12:35
1 bpavg unscheduled Day 24&25 (+/-3) Wk 4 1 2015-06-25T12:35 y
My code:
Proc sort data=data1;
by id test date awindow decending diff;
run;
data date2;
set data1;
if index(visit,'unscheduled') = 0 and test='bpavg' then do;
if first.awindow then flag='y';
end;
if index(visit,'unscheduled') > 0 and test='bpavg' then do;
if last.diff then flag.'y';
end;
run;
data data1;
infile datalines;
input id 1 test $4-9 visitwindow $13-33 awindow $35-57 diff : 3. date $63-79;
datalines;
1 bp Day 7 (-1, +2) Wk 1 Day 4 (-1, +2) Wk 1 2 2015-05-15
1 bpavg Day 7 (-1, +2) Wk 1 Day 4 (-1, +2) Wk 1 2 2015-05-15
1 bp Day 7 (-1, +2) Wk 1 Day 4 (-1, +2) Wk 1 1 2015-05-16
1 bpavg Day 7 (-1, +2) Wk 1 Day 4 (-1, +2) Wk 1 1 2015-05-16
1 bp unscheduled Day 10 (+/-3) Wk 2 2 2015-05-25
1 bpavg unscheduled Day 10 (+/-3) Wk 2 2 2015-05-25
1 bp unscheduled Day 10 (+/-3) Wk 2 1 2015-05-26
1 bpavg unscheduled Day 10 (+/-3) Wk 2 1 2015-05-26
1 bp unscheduled Day 24&25 (+/-3) Wk 4 1 2015-06-25T11:35
1 bpavg unscheduled Day 24&25 (+/-3) Wk 4 1 2015-06-25T11:35
1 bp unscheduled Day 24&25 (+/-3) Wk 4 1 2015-06-25T12:35
1 bpavg unscheduled Day 24&25 (+/-3) Wk 4 1 2015-06-25T12:35
;
run;
Proc sort data=data1;
by visitwindow awindow descending diff;
run;
data date2;
set data1;
by visitwindow awindow descending diff;
if visitwindow ^='unscheduled' and test='bpavg' then flag='y';
if visitwindow ='unscheduled' and last.awindow then flag='y';
if visitwindow ='unscheduled' and first.diff=last.diff and last.date then flag='y';
run;
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.