SAS PROC SORT错误:没有磁盘空间可用于写操作

时间:2018-08-09 21:01:56

标签: sas

我有一个数据库,导入SAS后的大小约为600mb。

(我在程序开始时使用OPTIONS COMPRESS = YES

然后我派生一些列/变量,并获得大小约为800 mb的最终数据库

最终数据库具有1929743 observations

我想要的

我要为我的最终数据库中的列descending中的每条记录按PUBLICATION_DATE的{​​{1}}顺序对数据进行排序

到目前为止我的代码

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 GB的空间,而使用C驱动器则有8 GB的空间)

我有4GB的RAM

因此,尽管如此,我仍然没有得到出现此错误的原因,也无法以任何方式获得所需的输出

2 个答案:

答案 0 :(得分:5)

如果您的C盘有8GB可用空间,则可能是您的问题。

排序在一个临时文件中进行,该文件的大小最多为原始文件的三倍。出于明显的原因,它还必须基于未压缩的数据。因此,如果未压缩的文件大小为3-4 GB,则无法在8GB的驱动器上对其进行排序。

您可以通过以下方式解决此问题:将您的工作地点移动到更大的驱动器(或释放空间),或者使用TAGSORT选项,该选项可减少实用程序文件的使用,但会降低速度(请参见SAS documentation更多细节)。

您还可以从排序的数据库中请求它;如果您要按数据库中的字段(而不是按修改后的字段)进行排序,这就是我的建议。在大多数情况下,您甚至不必使用proc sort;如果数据库在libname db中:

data access_sorted;
  set db.access_db_Table;
  by item descending publication_date;
run;

这将很好地工作,并且将直接从数据库中按排序顺序要求它。

答案 1 :(得分:0)

我首先想到的是@Joe说的话,即使您总体上有空间,您的工作库位置也没有空间。 我不知道答案,但是就所需的临时内存而言,PROC SQL中的ORDER BY语句是否便宜?您至少可以尝试一下。