DATA Step, Macro, Functions and more

How to assign a flag based on multiple conditions

Reply
Super Contributor
Posts: 272

How to assign a flag based on multiple conditions

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;

Frequent Contributor
Posts: 136

Re: How to assign a flag based on multiple conditions

Posted in reply to knveraraju91

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;

Thanks,
Suryakiran
Ask a Question
Discussion stats
  • 1 reply
  • 154 views
  • 1 like
  • 2 in conversation