楼主: Tigflanker
1226 2

[问答] 求助HASH Look Up [推广有奖]

  • 8关注
  • 18粉丝

副教授

49%

还不是VIP/贵宾

-

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

楼主
Tigflanker 发表于 2014-1-20 16:32:27 |AI写论文
100论坛币
  1. data a;
  2. array MD MD1 - MD3;
  3. do N = 1 to 1000;
  4.   do over MD;
  5.     MD = int(ranuni(20140120) * 1000);
  6.   end;output;
  7. end;
  8. run;
复制代码

求助HASH的look up,数据集如上。

说来感觉真的不难,但是自己太笨了,从一开始觉得HASH挺优化的,到现在觉得自己完全就搞不清楚这玩意到底怎么用,
太伤自尊了。。。

我想做个look up,对于上面的数据集,每条观测有三个值MD1 - MD3
规则是:一条一条的将数据读入HASH表,如果MD1在HASH表中已经被读入,则才把MD2读入;MD3是MD1和MD2都已被载入HASH时才读入。
问:在第几条观测时,MD的3条都在HASH中可以找到。

简单例子:
N = 1 to 10;
N
MD1
MD2
MD3
MARK
1
1
3
6
1
2
2
7
9
1
3
5
2
8
1
4
4
3
7
1
5
4
3
2
2
6
6
9
2
1
7
3
2
1
3

我本来打算反着做:

  1. data B;
  2. if 0 then set A;
  3. if _N_ = 1 then do;
  4.   dcl hash h(hashexp: 4);
  5.   h.definekey('MDX');
  6.   h.definedone();
  7. end;

  8. do MDX = 1 to 1000;
  9.   h.add(key:MDX);
  10. end;

  11. set A;
  12.   array MD MD1 - MD3;
  13. output;

  14. do over MD;
  15.   MDX = MD;
  16.   if not h.find(key:MDX) then do;
  17.     h.delete();
  18.         found = _i_;
  19.         output;
  20.         leave;
  21.   end;
  22. end;
  23. run;
复制代码

问题已解决,谢谢邓大援手。

最佳答案

邓贵大 查看完整内容

可笑,把爱倾注到HASH上,必将失望,唯有神的爱才是真正爱的源泉,才值得你投入
关键词:HASH Look Has Defined output
已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
Imasasor + 80 + 80 + 4 + 3 + 2 精彩帖子

总评分: 经验 + 80  论坛币 + 80  学术水平 + 4  热心指数 + 3  信用等级 + 2   查看全部评分

Bye SAS.
若有缘,能重聚。

沙发
邓贵大 发表于 2014-1-20 16:32:28
  1. data b;
  2.         declare hash h(hashexp:4);
  3.         h.definekey('MDX');
  4.         h.definedata('MDX');
  5.         h.definedone();
  6.         call missing(MDX);
  7.        
  8.         array MD[*] MD1-MD3;
  9.         array found[3];
  10.         do while(1);
  11.                 do _n_=1 to dim(MD);
  12.                         MD[_n_] = int(ranuni(20140120)*100000);
  13.                         found[_n_] = h.find(key: MD[_n_]);
  14.                 end;
  15.                 output;
  16.                 if sum(of found[*])=0 then leave;
  17.                 else if found[1]=0 and found[2]=0 then h.add(key: MD[3], data: MD[3]);
  18.                 else if found[1]=0 then h.add(key: MD[2], data: MD[2]);
  19.                 else h.add(key: MD[1], data: MD[1]);
  20.         end;
  21.         stop;
  22.         drop MDX;
  23. run;
复制代码
可笑,把爱倾注到HASH上,必将失望,唯有神的爱才是真正爱的源泉,才值得你投入
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Tigflanker + 1 + 1 + 1 深邃有大爱,THX~

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

Be still, my soul: the hour is hastening on
When we shall be forever with the Lord.
When disappointment, grief and fear are gone,
Sorrow forgot, love's purest joys restored.

藤椅
webgu 发表于 2014-1-20 22:18:37
邓贵大 发表于 2014-1-20 22:10
可笑,把爱倾注到HASH上,必将失望,唯有神的爱才是真正爱的源泉,才值得你投入
什么是神的爱意?
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-21 23:07