data have;
input Trn_key trn_CODE $ Sender $ Receiver $ Amount sender_in_receiver_list $ Receiver_in_Sender_list $;
cards;
1234 C John Louis 10000 Y N
2233 D David John 20000 N Y
1111 D Louis David 10000 N Y
2345 C Thomas John 30000 Y N
3456 D Daniel Louis 25000 Y Y
4567 C John Thomas 50000 Y Y
;
run;
data k;
set have;
k=Sender;if sender_in_receiver_list='Y' then output;
k=Receiver;if Receiver_in_Sender_list='Y' then output;
keep k;
run;
proc sort data=k nodupkey;by k;run;
data sender;
set have;
k=Sender;
keep k amount;
run;
data receiver;
set have;
k=Receiver;v=Receiver_in_Sender_list;
keep k amount;
run;
data want;
if _n_=1 then do;
if 0 then set sender;
declare hash s(dataset:'sender',multidata:'y');
s.definekey('k');
s.definedata('amount');
s.definedone();
if 0 then set receiver;
declare hash r(dataset:'receiver',multidata:'y');
r.definekey('k');
r.definedata('amount');
r.definedone();
end;
set k;
rc=r.find();
amount_receive=0;
do while(rc=0);
amount_receive+amount;
rc=r.find_next();
end;
condition2=ifn(amount_receive>=5000,1,0);
rc=s.find();
amount_send=0;
do while(rc=0);
amount_send+amount;
rc=s.find_next();
end;
condition3=ifn(amount_send>=amount_receive*0.1,1,0);
condition4=ifn(amount_send<=amount_receive*1.2,1,0);
if condition2 and condition3 and condition4 then output;
keep k;
run;
... View more