我有一个数据库,其在SAS中导入后的大小约为600mb.
(我OPTIONS COMPRESS = YES在程序开始时使用)
然后我派出一些列/变量,得到一个大小约为800 mb的最终数据库
最终数据库有 1929743 observations
我想要的是
我想按照最终数据库中列中每条记录的descending顺序对数据进行排序PUBLICATION_DATEITEM
我的代码到目前为止
PROC SORT DATA=newdb.access_db OUT= newdb.access_sorted;
BY ITEM DESCENDING PUBLICATION_DATE;
RUN;
Run Code Online (Sandbox Code Playgroud)
我得到的错误
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
Run Code Online (Sandbox Code Playgroud)
我的数据库不是那么大,应该出现没有磁盘空间的错误.
此外,我的硬盘上有很多空间(我在存储数据库的驱动器上大约500 GB,在C盘上存储libname8 GB)
我有4GB的RAM
所以这一切我没有得到为什么出现这个错误的原因以及任何我可以获得所需输出的方式
如果你在C盘上有8GB免费,那么这可能是你的问题.
排序发生在临时(临时)文件中,该文件最多可以是原始文件的三倍.由于显而易见的原因,它也必须是未压缩的数据.因此,如果您的未压缩文件的大小为3-4 GB,则无法在8GB驱动器上进行排序.
您可以通过将工作位置移动到更大的驱动器(或释放空间),或使用TAGSORT选项来解决此问题,该选项可以降低实用程序文件的使用速度(请参阅SAS文档以获取更多详细信息).
您也可以从数据库中对其进行排序; 如果您按数据库中的字段排序(而不是通过修改的字段),这就是我建议的.proc sort在大多数情况下你甚至不必使用; 如果数据库是libname db:
data access_sorted;
set db.access_db_Table;
by item descending publication_date;
run;
Run Code Online (Sandbox Code Playgroud)
这将很好地工作,并将直接从数据库中按排序顺序请求它.