Разделение данных на разные подмножества привело к нехватке места в SAS - PullRequest
0 голосов
/ 01 мая 2018

У меня есть один файл около 15G с данными за 2 года. Я попытался разделить два года на два разных файла со следующими частичными кодами SAS. Скажем, промежуточные обработанные данные называются A_20112012_xxx, а разделенные - B_2011_xxx, B_2012_xxx.

%let column = years;

proc sql noprint; select distinct cat ("data B", &column., "xxx;" , "set A_20112012_xxx;" , "where &column=", &column., ";" , "run;" ) into :SplitSteps separated by ";" from A_20112012_xxx; quit; &SplitSteps;

Несмотря на то, что не было проблемы разделить их один за другим, это всегда приводило к сообщению об ошибке нехватки места при выполнении вышеуказанного способа. Причина для этого заключается в том, что существуют файлы с более чем 2 годами, которые необходимо разделить. Я просто хочу автоматизировать процесс.

Какова возможная причина возникновения ошибки нехватки места?

1 Ответ

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

Возможно, отдельная операция не происходит, пока все строки не будут обработаны с помощью cat. Это будет означать, что у вас есть внутренний временный ресурс с большим количеством строк (для таблицы 15G) с широким результатом cat (с длиной по умолчанию 200 символов) до удаления дубликатов для отдельной операции.

Попробуйте переместить отдельный выбор в

%let column = years;
proc sql noprint;
    select
      cat ("data B", &column., "xxx;"
           ,  "set A_20112012_xxx;"
           ,  "where &column=", &column., ";"
           ,  "run;"
           )
    into :SplitSteps separated by ";"
    from (select distinct &column from A_20112012_xxx)
    ;
 quit;

 &SplitSteps;

Иногда для ясности лучше использовать модульность

%macro data_fracker (data=, column=);
  %macro split_for (value);
    data B_&value._xxx;
      set &data;
      where &column = &value;
    run;
  %mend;
  %local dispatch;
  proc sql noprint;
    select cats('%split_for(', &column, ')')
    into :dispatch separated by ' '
    from (select distinct &column from &data)
    ;
  quit;
  &dispatch
%mend;

%data_fracker (data=sashelp.class, column=age)

Также

  • Что такое операционная система и оборудование?
  • Если Windows, какое место на диске?
    • Что сообщает wmic logicaldisk list brief? 1017 *
  • Что такое папка WORK libref?
  • Что такое реальный журнал?
  • Запускается ли какой-либо из разделенных шагов?
...