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

難道HASH不是像傳說中那麼好用,也受到內存的限制?即便個人電腦內存是128G,仍然沒法避免上述錯誤,那麼告訴你一個簡單容易忽略的解決辦法:變量

在DATA步最後添加:H.CLEAR();程序

H是前面定義的hash名稱;數據

就這麼簡單,問題解決了!!!!!由於H.CLEAR();釋放了前面存儲的每一個KEY及對應的DATA內存,除非單個key和data的內存達到上限,不然不再會報上述的錯啦時間

相關文章
相關標籤/搜索