Und hier jetzt mit komplett unsortierter Quelle, da muss dann allerdings der ganze Datenbestand ins Memory passen:
data have;
input id umsatz sonst $;
datalines;
3 3 c
2 5 b
3 5 x
4 7 e
3 1 d
1 2 a
;
data want (
keep=_id _umsatz _sonst
rename=(_id=id _umsatz=umsatz _sonst=sonst)
);
if _n_ = 0 then set have;
length
_id 8
_umsatz 8
_sonst $8
;
retain _id;
if _n_ = 1
then do;
declare hash h(dataset:'have',ordered:'a',multidata:'Y');
h.definekey('id','umsatz');
h.definedata('id','umsatz','sonst');
h.definedone();
declare hiter hi('h');
rc = hi.first();
_id = id;
end;
rc = 0;
do until (rc);
do until(_id ne id or rc);
_umsatz = umsatz;
_sonst = sonst;
rc = hi.next();
end;
output;
_id = id;
end;
stop;
run;
proc print data=want noobs;
run;
Ergebnis:
id umsatz sons
1 2 a
2 5 b
3 5 x
4 7 e
... View more