sas - 如何在 SAS 中重用哈希表
问题描述
我有许多 large_tables(数十亿行),我想根据 id_list(数百万行)对其进行子集化。我正在使用哈希表来加速它:
data subset1;
set large_table1;
if _n_ eq 1 then do;
declare hash ht(dataset:"id_list");
ht.definekey('id');
ht.definedone();
end;
if ht.check() eq 0 then do; output; end;
run;
如何重用 id_list 的哈希表?在每个子集查询中重新创建它会浪费太多时间。
更新:如答案所示,目前没有在 SAS 中制作持久哈希表的解决方法。我用 1200 万行 id_list 和 15 亿行 large_table 凭经验测试了两个不太理想的选项。使用格式而不是哈希表几乎花费了两倍的时间(40 分钟对 23 分钟)。这使得在每个数据步骤中重新创建哈希表的开销可以忽略不计,因此我暂时只是这样做。
解决方案
遗憾的是,哈希表不能跨 DATA 步持续存在。AFAIK,当步骤结束时,它们被擦除以释放内存。我在 SGF 2018 上看到了 Art Carpenter 的演讲,他尝试了不同的方法来欺骗 SAS 制作持久哈希表,但未能成功。
https://www.sas.com/content/dam/SAS/support/en/sas-global-forum-proceedings/2018/2399-2018.pdf
推荐阅读
- java - 如何使用 GSON 库反序列化具有嵌套对象的 Json 并在 TextView 中显示它们
- laravel - 为什么 `have` 只适用于 laravel eloquent 上的 `group by` 字段?
- json - 无法在 Unity 中使用 JSONUtility 创建的 Java 脚本(节点 JS - Express)中读取 JSON 数据
- spring - 设置 SSL 连接时出现 Spring Boot 错误
- jquery - 尝试在 Gatsby.js 中使用 react-materialize 组件,得到 ReferenceError: $ is not defined
- python - Python - 如何获取连接操作系统类型?
- javascript - Firefox/Chrome JSON 将 JSON 中的数值解析为数值 -1 表示 1 个特定值
- javascript - JavaScript .animate() 不适用于 Chrome 69 及更高版本
- python - 在 Visual Studio 上创建新的 python 项目时出错
- css - 没有 Javascript 的随机视差背景 - 可能吗?