yours data set:
[code:1kn1a63p]data a;
input id $ date time bp1 bq1 sp1 sq1;
cards;
TXFE5 20050503 8450800 5800 4 5803 7
TXFE5 20050503 8451300 5801 36 5805 12
TXFE5 20050503 8451800 5805 12 5807 1
TXFE5 20050503 8451800 5805 12 5807 1
;
data b;
infile cards dsd missover;
input id $ date time bp1 bq1 sp1 sq1 deal ep1 eq1;
cards;
TXFE5,20050503,8450600,,,,,8450618,5800,1
TXFE5,20050503,8450700,,,,,8450685,5801,3
TXFE5,20050503,8450900,,,,,8450872,5803,7
TXFE5,20050503,8450900,,,,,8450905,5804,1
TXFE5,20050503,8451400,,,,,8451358,5805,12
TXFE5,20050503,8451500,,,,,8451445,5805,2
TXFE5,20050503,8451600,,,,,8451602,5805,1
TXFE5,20050503,8451800,5805,12,5807,1,8451778,5807,1
TXFE5,20050503,8451800,5805,12,5807,1,8451856,5807,1
;
data c;
merge b a;
by id date time;
run;
[/code:1kn1a63p]
方法不是很好用的hash,看看下边编写的这段代码运行结果是不是你想要的!
[code:1kn1a63p]data yours(drop=rc bp bq sp sq);
if _n_=0 then set a(obs=3);
if _n_=1 then do;
declare hash h(dataset:"a",ordered:"a");
h.definekey('time');
h.definedata('bp1','bq1','sp1','sq1');
h.definedone();
end;
h.output(dataset:'d');
declare hiter iter("h");
rc=iter.first();
do until(last);
set c(rename=(bp1=bp bq1=bq sp1=sp sq1=sq)) end=last;
if h.find()^=0 then output;
else do;
bp1=bp;
bq1=bq;
sp1=sp;
sq1=sq;
output;
rc=iter.next();
end;
end;
run;
[/code:1kn1a63p] |