Недостаточно памяти с помощью PROC FREQ - PullRequest
0 голосов
/ 21 мая 2018

У меня есть приблизительно 1 000 000 строк и 25 столбцов данных, и я пытаюсь вернуть список имен столбцов, количество различных значений и наличие пропущенных значений.

Я не могу напрямую кодировать имена столбцов в PROC SQL и считать отдельно, так как у меня есть многочисленные наборы данных с разными именами столбцов, и я пытаюсь автоматически вернуть желаемый результат для всех таблиц с одним кускомcode.

Я попытался запустить следующий код

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

Это возвращает ошибку нехватки памяти.Есть ли другой способ достижения результата, позволяющий избежать ошибки нехватки памяти.

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Этот вопрос очень похож на Сводная статистика SAS из набора данных

Методы ответов охватывают

  • transpose + freq
  • хеш
  • частота с ODS исключает + вывод
0 голосов
/ 21 мая 2018

Нет необходимости вводить имя столбца с помощью 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;
...