SAS - proc freq ...内存不足?

时间:2014-04-17 16:03:32

标签: memory sas

我以前很少使用proc freq。我试图运行以下内容并收到错误消息称SAS无法分配足够的内存。该数据集有大约15,000条记录。这里有什么替代方案?

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

2 个答案:

答案 0 :(得分:0)

由于您的百分比下降,以下内容应该相同:

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内存。

答案 1 :(得分:0)

我之前也打过这个。我绕过它的方式就是不使用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标志。