统计211

标题: 【hash】SAS hash介绍updating [打印本页]

作者: 凤鸾    时间: 2012-1-31 11:23
标题: 【hash】SAS hash介绍updating
本帖最后由 凤鸾 于 2012-1-31 12:21 编辑
  1. Hashing
  2. 搜索(Searching)是用的最广泛的一种技术。搜索技术包括:merges ,joins,formats,indexs以及一些特别的操作和functions.
  3. 对于merge,sql,conditional logic等都是基于comparsion:也就是将key与表里面的一个或多个keys进行比较。这种方法因为是跟key的value进行比较进而判断是相等或不等,是一种速度很慢,耗费内存的一种做法。而且对于merge,得事先对data进行排序,如果数据集比较大的话,那么更是一种低效率的选择。
  4. Hashing哈希是一种基于DIRECT-ADDRESSING的方法。
  5. 对于direct addressing,有3种:key –indexing, BITMAPPING, HASHING.
  6. 1)        key-indexing
  7. 用表中的key的值作为index的方法。
  8. 例子:
  9. 假设我们不能对2个数据集进行排序,但想将saml中的信息根据key,加到large中。我们该怎么操作呢?下面是用key-indexing的方法解决。
  10. data smal;
  11. input key s_sat;
  12. cards;
  13. 2 1
  14. 3 2
  15. 5 3
  16. 2 0
  17. 7 4
  18. 9 5
  19. 5 6
  20. 7 9
  21. 3 7
  22. ;
  23. data large;
  24. input key l_sat;
  25. cards;
  26. 1 7
  27. 2 3
  28. 2 6
  29. 9 1
  30. 9 3
  31. 7 1
  32. ;

  33. data match ;
  34. array hkey (-4000000 : 4000000) _temporary_ ;
  35. do until ( eof1 ) ;
  36. set smal end = eof1 ;
  37. if missing (hkey(key)) then hkey(key) = s_sat ;  /*第一个do-unitl:将表smal中的key加载到key-index*/
  38. end ;
  39. do until ( eof2 ) ;
  40. set large end = eof2 ;
  41. s_sat = hkey(key) ;       
  42. if s_sat > . then output ;  /*第二个do-unitl:在large中搜索每个key,匹配的话,就将其输出来*/
  43. end ;
  44. stop ;
  45. run ;
  46. 值得注意的:1)在smal中的变量s_sat,必须用s_sat=hkey(key)的计算然后output.否则会很诡异的bug.2)saml中的key有重复观测,自动只保留第一条,重复的观测行被删掉。
  47. Key-indexing缺点:key-index必须是有限的整数。而且存储这些key-index,如果key-index是很大的数的话,那么存在这些index是要消耗很大的内存的。从而就有了bitmapping,它存储key-index是以bits存储的。减少了空间。
  48. 2)bitmapping, bitmapping是key-indexing的一个进步。在此省略。
  49. 3)hashing
  50. [color=Red]还在更新中[/color]
复制代码

作者: 论坛COO    时间: 2012-1-31 22:56
年过了,都开始上班了
作者: 凤鸾    时间: 2012-2-8 11:12
winsentess 发表于 2012-2-7 17:15
hash,好样的,先顶再看

写得不详细,写得也不好,还没写完。近期有点小忙。等忙完了把它完善。:  )




欢迎光临 统计211 (http://tj211.com/) Powered by Discuz! X3.2