SAS HASH 如何使用不唯一的key

HASH的正常使用是要求唯一的key,但如果想使用相同关键值key,参考
https://wenku.baidu.com/view/2cc9b821a1c7aa00b42acba0.html

举例如下(应用:多对多的表关联):

data testdup(index=(key));
length key data 8;
input key data;
datalines;
1 10
2 11
1 15
3 20
2 16
2 9
3 100
5 5
1 5
4 6
5 99
;
run;
data a;
input key data1;
cards;
1 8
1 11
2 14
2 3
5 6
5 8
;
run;

data RESULT(KEEP=KEY DATA temp RESULT );
length r 8;
IF _N_=0 THEN SET A;
IF _N_=1 THEN DO;
dcl hash h(dataset:'A', multidata: 'y', ordered: 'y');/*multidata:'y'允许重复的KEY在hash中出现,默认情况不允许*/
h.definekey('key');
h.definedata('key', 'data1');
h.definedone();
call missing (key, data1);
END;
SET testdup;
by key;
result=0;

rc = h.find();
if (rc = 0) then do;
if data>data1 then DO;result=1;TEMP=DATA1;ouput;END;
put key= data= data1= result=;
h.has_next(result: r);/*h.has_next():在允许出现相同关键词的前提下,判断是否存在下一条相同关键字的观测*/
do while(r ne 0);/*不等于0表示存在下一条相同关键字的观测*/
rc = h.find_next();/*h.find_next():在允许出现相同关键字的前提下,寻找下一条相同关键字的观测*/
if data>data1 then DO;result=1;TEMP=DATA1; output;END;
put 'dup ' key= data= data1= result=;
rc = h.replacedup();/*h.replacedup():在允许出现相同关键词的前提下,使用新的数据代替当前关键字对应的数据等*/
h.has_next(result: r);
end;
end;

run;
PROC PRINT DATA=RESULT;
RUN;

结果如下:

 

ObskeydataresultTEMP
111018
211518
3115111
421113
5216114
621613
72913
859916
959918

转载于:https://www.cnblogs.com/Anni-love-Ferris-wheel/p/7552005.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值