统计211
标题:
【hash】SAS hash介绍updating
[打印本页]
作者:
凤鸾
时间:
2012-1-31 11:23
标题:
【hash】SAS hash介绍updating
本帖最后由 凤鸾 于 2012-1-31 12:21 编辑
Hashing
搜索(Searching)是用的最广泛的一种技术。搜索技术包括:merges ,joins,formats,indexs以及一些特别的操作和functions.
对于merge,sql,conditional logic等都是基于comparsion:也就是将key与表里面的一个或多个keys进行比较。这种方法因为是跟key的value进行比较进而判断是相等或不等,是一种速度很慢,耗费内存的一种做法。而且对于merge,得事先对data进行排序,如果数据集比较大的话,那么更是一种低效率的选择。
Hashing哈希是一种基于DIRECT-ADDRESSING的方法。
对于direct addressing,有3种:key –indexing, BITMAPPING, HASHING.
1) key-indexing
用表中的key的值作为index的方法。
例子:
假设我们不能对2个数据集进行排序,但想将saml中的信息根据key,加到large中。我们该怎么操作呢?下面是用key-indexing的方法解决。
data smal;
input key s_sat;
cards;
2 1
3 2
5 3
2 0
7 4
9 5
5 6
7 9
3 7
;
data large;
input key l_sat;
cards;
1 7
2 3
2 6
9 1
9 3
7 1
;
data match ;
array hkey (-4000000 : 4000000) _temporary_ ;
do until ( eof1 ) ;
set smal end = eof1 ;
if missing (hkey(key)) then hkey(key) = s_sat ; /*第一个do-unitl:将表smal中的key加载到key-index*/
end ;
do until ( eof2 ) ;
set large end = eof2 ;
s_sat = hkey(key) ;
if s_sat > . then output ; /*第二个do-unitl:在large中搜索每个key,匹配的话,就将其输出来*/
end ;
stop ;
run ;
值得注意的:1)在smal中的变量s_sat,必须用s_sat=hkey(key)的计算然后output.否则会很诡异的bug.2)saml中的key有重复观测,自动只保留第一条,重复的观测行被删掉。
Key-indexing缺点:key-index必须是有限的整数。而且存储这些key-index,如果key-index是很大的数的话,那么存在这些index是要消耗很大的内存的。从而就有了bitmapping,它存储key-index是以bits存储的。减少了空间。
2)bitmapping, bitmapping是key-indexing的一个进步。在此省略。
3)hashing
[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