我运行了以下代码,一小时后,就像代码完成排序执行错误一样。我的代码是否有问题,或者我的计算机处理器和Ram不足
proc sql;
create table today as
select a.account_number, a.client_type, a.device ,a.entry_date_est,
a.entry_time_est, a.duration_seconds, a.channel_name, b.esn, b.service_start_date,
b.service_end_date, b.product_name, b.billing_frequency_fee, b.plan_category,
b.plan_subtype, b.plan_type
from listen_nomiss a inner join service_nomiss b
on (a.account_number = b.account_number)
order by account_number;
quit;
答案 0 :(得分:3)
当您用完实用程序空间以执行排序时,最常见到该错误。 this SAS KB post提供了一些故障排除建议。最有用的建议:
options fullstimer msglevel=i ;
会为您提供有关幕后情况的更多信息,以便您解决导致问题的原因proc options option=utilloc; run;
会告诉您实用程序目录在哪里,您的临时文件将被创建用于排序。验证最终表所需空间大约是可用空间的3倍 - 排序需要大约3倍的空间,以便根据排序的处理方式对数据集进行正确排序。OPTIONS COMPRESS;
将节省一些(可能很多)空间。 options memsize;
和options sortsize;
将告诉您为SAS分配了多少内存,以及在内存和磁盘上进行排序的大小。 sortsize
应约为memsize
的1/3(考虑到需要3倍的空间来处理它)。如果您的决赛桌位于sortsize
左右,如果默认值太低(memsize相同),您可能最好尝试增加sortsize
。
您还可能遇到一些权限问题; kb文章中的其他一些建议涉及验证您实际上是否有权写入实用程序目录,或者它是否存在。
答案 1 :(得分:1)
我过去曾经有过一个项目,资源也是一个问题。 排序时有两种方法:
请注意,这些方法会有性能损失(可能只是在较小程度上是第三种),如果您以后不考虑它们(或故意销毁它们),索引会让您头疼。
如果/当您将整个联接重写为SAS合并时,请注意:请记住,SAS合并本身并不模仿多对多联接。 (它一对一,一对多和多对一)可能不是这里的情况(很少),但我提到它是安全的。