Thank you for your help. I've adapted your code to generate 4 different sets of code (1 for each rule) and then used a final data step to combine the data. I am struggling with Rule 3. I would like to keep any observations that have distinct event1 and event2 and has missing ID_1 and ID_2. My code keeps 2 rows of data and I only want the row with RSS13 OWT12. How can I modify the code for rule 3 for desired output? See code below: data have; infile cards expandtabs; input (event1 event2 ID_1 ID_2) ($); cards; RSS1 OWT1 423 5 RSS2 OWT1 423 5 RSS3 OWT1 423 5 RSS1 OWT2 423 5 RSS2 OWT2 423 5 RSS3 OWT2 423 5 RSS10 OWT2 . 5 RSS4 OWT3 12 . RSS7 OWT3 12 . RSS11 OWT3 . . RSS13 OWT12 . . RSS9 OWT5 . 14 RSS9 OWT8 . 14 RSS17 OWT8 . 14 ; /* Code for Keeping observations that meet Rule 1*/ data rule1assist; set have; rule1assist = catx('-', trim(ID_1), trim(ID_2)); run; proc sort data=rule1assist; by rule1assist; run; proc sort data=rule1assist out=rule1tmp(keep=rule1assist); by rule1assist; run; data rule1tmp; set rule1tmp; if first.rule1assist eq 1 AND last.rule1assist eq 1 then delete; by rule1assist; run; proc sort data=rule1tmp nodup; by rule1assist; run; proc sql; create table rule1 as select event1, event2, ID_1, ID_2, a.rule1assist from rule1assist a, rule1tmp b where a.rule1assist eq b.rule1assist and ID_1 ne " " and ID_2 ne " " ; quit; /*Code for Keeping observations that meet Rule 2*/ data rule2assist; set have; rule2assist = catx('-', trim(event2), trim(ID_1)); run; proc sort data=rule2assist; by rule2assist; run; proc sort data=rule2assist out=rule2tmp(keep=rule2assist); by rule2assist; run; data rule2tmp; set rule2tmp; if first.rule2assist eq 1 AND last.rule2assist eq 1 then delete; by rule2assist; run; proc sort data=rule2tmp nodup; by rule2assist; run; proc sql; create table rule2 as select event1, event2, ID_1, ID_2, a.rule2assist from rule2assist a, rule2tmp b where a.rule2assist eq b.rule2assist and ID_2 eq " " ; quit; /*Code for Keeping observations that meet Rule 3...this doesn't work*/ data rule3assist; set have; rule3assist = catx('-', trim(event1), trim(event2),trim(ID_1), trim(ID_2)); run; proc sort data=rule3assist; by rule3assist; run; proc sort data=rule3assist out=rule3tmp(keep=rule3assist); by rule3assist; run; data rule3tmp; set rule3tmp; if first.rule3assist eq 1 AND last.rule3assist eq 1 ; by rule3assist; run; proc sort data=rule3tmp nodup; by rule3assist; run; proc sql; create table rule3 as select distinct * from rule3assist a, rule3tmp b where a.rule3assist eq b.rule3assist and ID_2 eq " " and ID_1 eq " " ; quit; /*Code for Keeping observations that meet Rule 4*/ data rule4assist; set have; rule4assist = catx('-', trim(event1), trim(ID_2)); run; proc sort data=rule4assist; by rule4assist; run; proc sort data=rule4assist out=rule4tmp(keep=rule4assist); by rule4assist; run; data rule4tmp; set rule4tmp; if first.rule4assist eq 1 AND last.rule4assist eq 1 then delete; by rule4assist; run; proc sort data=rule4tmp nodup; by rule4assist; run; proc sql; create table rule4 as select event1, event2, ID_1, ID_2, a.rule4assist from rule4assist a, rule4tmp b where a.rule4assist eq b.rule4assist and ID_1 eq " " ; quit; data want; set rule1 rule2 rule3 rule4; run; /*Code for Keeping observations that meet Rule 2*/ data rule2assist; set have; rule2assist = catx('-', trim(event2), trim(ID_1)); run; proc sort data=rule2assist; by rule2assist; run; proc sort data=rule2assist out=rule2tmp(keep=rule2assist); by rule2assist; run; data rule2tmp; set rule2tmp; if first.rule2assist eq 1 AND last.rule2assist eq 1 then delete; by rule2assist; run; proc sort data=rule2tmp nodup; by rule2assist; run; proc sql; create table rule2 as select event1, event2, ID_1, ID_2, a.rule2assist from rule2assist a, rule2tmp b where a.rule2assist eq b.rule2assist and ID_2 eq " " ; quit; /*Code for Keeping observations that meet ...this doesn't work*/ data rule3assist; set have; rule3assist = catx('-', trim(event1), trim(event2),trim(ID_1), trim(ID_2)); run; proc sort data=rule3assist; by rule3assist; run; proc sort data=rule3assist out=rule3tmp(keep=rule3assist); by rule3assist; run; data rule3tmp; set rule3tmp; if first.rule3assist eq 1 AND last.rule3assist eq 1 ; by rule3assist; run; proc sort data=rule3tmp nodup; by rule3assist; run; proc sql; create table rule3 as select distinct* from rule3assist a, rule3tmp b group by a.event2 where a.rule3assist eq b.rule3assist and ID_2 eq " " and ID_1 eq " " ; quit; /*Code for Keeping observations that meet Rule 4*/ data rule4assist; set have; rule4assist = catx('-', trim(event1), trim(ID_2)); run; proc sort data=rule4assist; by rule4assist; run; proc sort data=rule4assist out=rule4tmp(keep=rule4assist); by rule4assist; run; data rule4tmp; set rule4tmp; if first.rule4assist eq 1 AND last.rule4assist eq 1 then delete; by rule4assist; run; proc sort data=rule4tmp nodup; by rule4assist; run; proc sql; create table rule4 as select event1, event2, ID_1, ID_2, a.rule4assist from rule4assist a, rule4tmp b where a.rule4assist eq b.rule4assist and ID_1 eq " " ; quit; data want; set rule1 rule2 rule3 rule4 run;
... View more