楼主: Tigflanker
1080 2

[问答] 问个HASH小问题:能否有办法做“逐步check”的? [推广有奖]

  • 8关注
  • 18粉丝

副教授

49%

还不是VIP/贵宾

-

威望
0
论坛币
2321 个
通用积分
9.9128
学术水平
179 点
热心指数
194 点
信用等级
167 点
经验
27443 点
帖子
622
精华
0
在线时间
851 小时
注册时间
2011-3-27
最后登录
2023-5-14

楼主
Tigflanker 发表于 2015-5-12 09:12:14 |AI写论文
50论坛币
想问各位一个问题呵,不知道有没有好的可行的方法。

就是例如我一个hash table中有3个key:a,s和d,有一个值:v。
我现在想把这个table中的v值find到另一张大表中。

常规情况直接 rc = h.find(); 就可以了,不过我现在merge的规则打算这样:

先按照a来做key进行find,find不到了;
再按照a和s做key进行find,还是find不到了;
最后按3个key做最后一次index。

目前我自己可用的就是建三张table,分别 find 3次;可是我还是希望能够有直接的方法。
类似于:h.definekey('a','s','d') & h.find(key:a,key:s);

谢谢

我理想的就是这样:
  1. data have;
  2.   input a s d v;
  3.   cards;
  4.   1 . . 123
  5.   2 1 . 234
  6.   2 2 . 345
  7.   3 1 1 456
  8.   3 2 1 567
  9.   3 2 2 678
  10.   ;run;

  11. data want;
  12.   input a s d;
  13.   cards;
  14.   1 3.14 3.24
  15.   2 2 6.18
  16.   3 2 2
  17.   ;run;
复制代码
在want表在have中查找时,我能保证每一组keys对应的情况都是唯一的。

目前用的办法是利用%do + %sysfunc( byte( &i. + 65 构造了三张表,做逐步的查找;若是能一张表就完成该多好。

其实我这个例子中,在want里做一个:(a,s,d) => (a,s,.) => (a,.,.)的循环查找也行;不过总感觉没建立三个表来的放心。
例如我have表中的第一个情况变成了:1 . 777 123那也就出问题了,(1 . .)是找不到的,但是(1)就能找到。

关键词:check Chec HASH Has 小问题
Bye SAS.
若有缘,能重聚。

沙发
learsaas 发表于 2015-5-12 10:41:57
建3张hash表,三张hash表的key分别为a,a和s,a和s和d
已有 1 人评分论坛币 热心指数 收起 理由
Tigflanker + 5 + 3 谢谢,我就想知道是否还有它法。

总评分: 论坛币 + 5  热心指数 + 3   查看全部评分

藤椅
Tigflanker 发表于 2015-5-15 14:22:55
自己顶下,多希望能这样定义一个表:
  1. dcl hash h(dataset:'x');
  2. h.definekey('a','s','d');
  3. h.definekey2('a','s');
  4. h.definekey3('a');
  5. h.definedata('v');
  6. h.definedone();
复制代码

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 00:03