我有一个数据库,导入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
因此,尽管如此,我仍然没有得到出现此错误的原因,也无法以任何方式获得所需的输出
答案 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语句是否便宜?您至少可以尝试一下。