Analyze the code and results from execution with the 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
;
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
;
quit;
data rule2assist;
set rule1;
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.rule1assist, a.rule2assist
from rule2assist a, rule2tmp b
where a.rule2assist eq b.rule2assist
;
quit;
This seems to implement the rule 1 correctly but not rule 2. Because after applying the rule 2 deletions your rule 3 cannot be applied anymore. So I suspect I am not applying the correct programming logic for rule 2. The code for rule 1 could work for you though.
... View more