ОШИБКА СОРТИРОВКИ SAS PROC: Недостаточно места на диске для операции записи
У меня есть база данных, размер которой после импорта в SAS составляет около 600 МБ.
(Я использую OPTIONS COMPRESS = YES
в начале моей программы)
Затем я получаю некоторые столбцы / переменные и получаю окончательную базу данных размером около 800 МБ.
Конечная база данных имеет 1929743 observations
Что я хочу
Я хочу отсортировать данные в descending
порядок PUBLICATION_DATE
для каждой записи в столбце ITEM
в моей окончательной базе данных
Мой код пока
PROC SORT DATA=newdb.access_db OUT= newdb.access_sorted;
BY ITEM DESCENDING PUBLICATION_DATE;
RUN;
Ошибка, которую я получаю
ERROR: No disk space is available for the write operation. Filename =
C:\Users\AB364273\AppData\Local\Temp\SAS Temporary
Files\SAS_util00010000204C_A00DVDPCSAS2007\ut204C000008.utl.
ERROR: Failure while attempting to write page 134 of sorted run 11.
ERROR: Failure while attempting to write page 40544 to utility file 1.
ERROR: Failure encountered while creating initial set of sorted runs.
ERROR: Failure encountered during external sort.
ERROR: Sort execution failure.
NOTE: The SAS System stopped processing this step because of errors.
NOTE: There were 1244486 observations read from the data set
NEWDB.ACCESS_DB.
WARNING: The data set NEWDB.ACCESS_SORTED may be incomplete. When this step was
stopped there were 0 observations and 57 variables.
NOTE: PROCEDURE SORT used (Total process time):
real time 2:17.20
cpu time 14.66 seconds
Моя база данных не такая большая, что должна появиться ошибка, как будто нет места на диске.
Также у меня много свободного места на жестком диске (около 500 ГБ на диске, где я храню базу данных, используя libname
и 8 Гб на диске C)
У меня оперативная память 4Гб
Таким образом, со всем этим я не понимаю, почему эта ошибка появляется, и в любом случае я могу получить желаемый результат
2 ответа
Если у вас есть 8 ГБ свободного места на диске C, то это, вероятно, ваша проблема.
Сортировка происходит во временном (чистом) файле, и этот файл может быть в три раза больше исходного файла. Это также должно быть на несжатых данных, по очевидным причинам. Таким образом, если ваш несжатый файл имеет размер, скажем, 3-4 ГБ, он не будет сортироваться на диске 8 ГБ.
Вы можете решить эту проблему, переместив свое рабочее место на больший диск (или освободив место), или воспользовавшись опцией TAGSORT, которая уменьшает использование служебного файла за счет скорости (дополнительную информацию см. В документации SAS).
Вы также можете запросить его из отсортированной базы данных; это то, что я бы порекомендовал, если вы сортируете по полям в базе данных (не по измененным полям). Вам даже не нужно использовать proc sort
в большинстве случаев; если база данных находится в libname db
:
data access_sorted;
set db.access_db_Table;
by item descending publication_date;
run;
Это будет хорошо работать и будет запрашивать в отсортированном порядке непосредственно из базы данных.
Моя первая мысль была о том, что @Joe сказал, что в вашей рабочей библиотеке не хватает места, даже если в целом у вас есть место. Я не знаю ответа на этот вопрос, но является ли оператор ORDER BY в PROC SQL менее дорогим с точки зрения требуемой временной памяти? Вы могли бы попробовать это по крайней мере.