使用PROC FREQ内存不足

时间:2018-05-21 08:23:42

标签: sas

我有大约1,000,000行和25列数据,我正在尝试返回列名列表,不同值的数量以及是否存在缺失值。

我无法直接在PROC SQL中的列名中进行编码并计算不同,因为我有许多具有不同列名的数据集,并且我试图使用一段代码自动为所有表返回所需的结果。 / p>

我已尝试运行以下代码

proc freq nlevels data= &DATASET_NAME;
    ods output nlevels=nlevels ;
    tables _all_ NOPRINT;
run;

这会返回内存不足错误。是否有另一种方法来实现结果,避免内存不足错误。

2 个答案:

答案 0 :(得分:0)

没有必要通过 table _all _ 输入列名,但是它可能通过同时输入所有列来使内存不足,尝试将列分隔成proc freq然后组合结果:

proc sql;
   create table name as
   select name from dictionary.columns where libname='SASHELP' and memname='CLASS';
quit;

data want;
run;

data _null_;
   set name;
   call execute(
      'proc freq data=class nlevels;
       table '||name||';
       ods output nlevels=nlevels;
       run;
       data want;
          set want nlevels;
       run;'
    );
run;

答案 1 :(得分:0)

此问题与SAS summary statistic from a dataset

非常相似

答案涵盖了

的技巧
  • transpose + freq
  • 散列
  • freq w / ODS exclude + output