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;
Don't miss out on SAS Innovate - Register now for the FREE Livestream!
Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.
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.