SAS HASH :内存失败时,Hash对象添加了***个项
处理千万观测数据的小伙伴,辛苦等了一两个小时,结果发现以下报错,心如死灰:
ERROR: 内存失败时,Hash 对象添加了 4587504 个项。
FATAL: 内存不足,无法执行 DATA 步程序。 在“EXECUTION”阶段中止。
ERROR: 由于内存不足,SAS 系统停止了对该步的处理。
NOTE: 从数据集 WORK.T_QUERY. 读取了 82425420 个观测
WARNING: 数据集 D.T_QUERY 可能不完整。该步停止时,共有 4587503 个观测和 97 个变量。
NOTE: 压缩的数据集 D.T_QUERY 大小减少了 57.82%。
压缩为 23037 页;不压缩将会要求 54614 页。
WARNING: 数据集 D.T_QUERY 由于该步已停止,而没有被替换。
NOTE: “DATA 语句”所用时间(总处理时间):
实际时间 1:53:01.74
CPU 时间 1:51:28.01
难道HASH不是像传说中那么好用,也受到内存的限制?即使我的电脑内存是128G,仍然无法避免上述错误,那么告诉你一个简单容易忽略的解决办法:
在DATA步最后添加:H.CLEAR();
H是前面定义的hash名称;
就这么简单,问题解决了!!!!!因为H.CLEAR();释放了前面存储的每个KEY及对应的DATA内存,除非单个key和data的内存达到上限,否则再也不会报上述的错啦
Stay hungry, stay foolish