前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SAS中哈希表的连接问题

SAS中哈希表的连接问题

作者头像
专业余码农
发布2020-07-15 16:53:51
2.3K0
发布2020-07-15 16:53:51
举报
文章被收录于专栏:老Z的博客老Z的博客

哈希表即散列表(Hash table),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。在SAS中使用哈希表十分简单,你并不需要知道SAS内部是怎么实现的,只需要知道哈希表是存储在内存中的,查找是根据key值直接获得存储的地址的精确匹配。加上使用哈希表合并数据集时不用排序的优点,在实际应用中可以极大的提高程序运行效率,尤其是数据集较大的时候。但是由于哈希表是放到内存中的,因此对内存有一定要求!

在实际应用中,我们通常会碰到要选择把哪个数据集放到哈希表中的问题。在Michele M. Burlew的《SAS® Hash Object Programming Made Easy》一书有这样一段话:

While it may seem counterintuitive, it may be more efficient to load your larger data set into the hash object, especially if it is your lookup data set. The action of reading your smaller data set sequentially and looking up information in a large hash object is likely to process more quickly than if you read your larger data set sequentially and look up information for each of its observations in a small hash object.

从这句话可以看出,将最大的数据集放到哈希表中更为高效,但是在实际应用中根据程序的目的还是需要做出选择,即选择左连接(A left join B)还是右连接(A right join B)。其实很简单,如果数据集不是很大的时候可以这样处理:如果是左连接那么就把数据集B放到哈希表中;如果是右连接就把数据集A放到哈希表中;如果是内接连(A inner join B)那么就把大的放到哈希表中。对于前两种连接如果不按上述处理,那么就需要多写几行额外的代码来修改哈希表里的内容。

另外,我们还会碰到多个数据集用哈希表进行合并的情况,如果KEY是同一个变量,那么任意放N-1个数据集放到哈希表中,直接用以下语句即可实现:

if h1.find()=0 and h2.find()=0 and ... and hn.find()=0;

如果KEY是不是同一个变量,那么就要单独指定KEY,语句如下:

rc=h1.find();
rc=h2.find(key: VAR);
...
rc=hn.find(key: VAR_N);
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-09-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档