首先说一下,哈希表的关键字是可以不唯一的,如下可以实现。详细请看
http://www.pinggu.org/bbs/thread-1062169-1-1.html
data data1;
input kind$ id$;
cards;
a 1
a 2
b 1
b 3
c 2
c 3
;
run;
data data2;
input id$ amt;
cards;
1 50
2 40
2 30
3 30
;
run;
data result1;
length kind$ 8 id$ 8;
if _n_=1 then do;
declare hash h1(dataset:'data1',ordered:'y', multidata: 'y');
h1.definekey('id');
h1.definedata('id','kind');
h1.definedone();
call missing(id,kind);
end;
do while(not last1);
set data2 end=last1;
h1.find();
output;
h1.has_next(result:r);
do while(r ne 0);
h1.find_next();
output;
h1.has_next(result:r);
end;
end;
run;
data _null_;
length kind$ 8 id$ 8;
if _n_=1 then do;
declare hash h2(ordered:'y');
h2.definekey('kind');
h2.definedata('id','kind','total');
h2.definedone();
call missing(id,kind,total);
end;
do while(not done);
set result1 end=done;
if h2.find()=0 then do;
total+amt;
h2.replace();
end;
else do;
total=amt;
h2.add();
end;
end;
h2.output(dataset:'result2');
run;