簡體   English   中英

SAS-進程頻率…內存不足?

[英]SAS - proc freq…insufficient memory?

我以前很少使用proc freq。 我正在嘗試運行以下命令,但收到一條錯誤消息,提示SAS無法分配足夠的內存。 數據集約有15,000條記錄。 我在這里有什么選擇?

proc freq data=dsb_un noprint; 
table bsn*dsb / out=dsb_un2(where=(count>1) drop=percent); 
run;

由於您要刪除百分比,因此以下內容應相同:

proc freq data=dsb_un noprint;
by bsn;
tables dsb/out=dsb_un2(where=(count>1) drop=percent);
run;

BY語句應顯着減少內存分配。 您也可以類似的方式使用PROC SQL,該方式可能適合內存。

問題可能是DSB和BSN大多都是唯一值,因此您可能每個都有10k +值-制作一個10k * 10k或1e8單元的主表,需要8e8字節的內存,這可能超出了您的可用內存對於SAS。

我也曾經打過這個。 我繞過它的方法就是根本不使用proc freq 我相信我改用proc summary 它也可以計算頻率。

首先是測試數據集:

data tmp;
  set sashelp.class;
  dummy = 1;
run;

使用原始的freq方法:

proc freq data=tmp noprint; 
  table sex*age / out=freq1(where=(count>1) drop=percent); 
run;

使用proc summary方法:

proc summary data=tmp noprint nway missing;
  class sex age;
  var dummy;
  output out=freq2(where=(dummy>1) drop=_type_ _freq_) sum=;
run;

請注意, proc summary可能需要您可以計算的虛擬變量。 因此,在我的測試數據集中創建了dummy=1標志。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM