Sas 内部联接的过程sql结束时出现排序错误
我运行了下面的代码,一个小时后,正当代码完成时,出现了一个排序执行错误。我的代码是否有问题,或者我的计算机处理器和Ram是否不足Sas 内部联接的过程sql结束时出现排序错误,sas,Sas,我运行了下面的代码,一个小时后,正当代码完成时,出现了一个排序执行错误。我的代码是否有问题,或者我的计算机处理器和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_d
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;
当执行排序的实用程序空间不足时,这种错误最常见。有关故障排除的一些建议,请参阅;最有用的建议是:
将为您提供有关幕后情况的更多信息,因此您可以对导致问题的原因进行故障排除options-fullstimer-msglevel=i
将告诉您将在其中创建临时文件以进行排序的实用程序目录的位置。验证是否有大约3倍于最终表所需空间的可用空间-由于排序的处理方式,排序需要大约3倍的空间才能正确排序数据集proc options=utilloc;运行
选项压缩如果尚未启用,代码>将节省一些(可能很多)空间
options memsize代码>和选项排序大小
将告诉您为SAS分配了多少内存,以及在内存和磁盘上进行排序的大小sortsize
应该是memsize
的1/3左右(考虑到处理它需要3倍的空间)。如果您的最后一个表已经存在,但刚刚超过sortsize
,如果默认值太低(memsize相同),您最好尝试增加sortsize
您还可能在权限方面存在一些问题;kb文章中的一些其他建议涉及验证您是否确实有写入实用程序目录的权限,或者该目录是否存在。当您执行排序的实用程序空间不足时,这种错误最常见。有关故障排除的一些建议,请参阅;最有用的建议是:
options-fullstimer-msglevel=i
将为您提供有关幕后情况的更多信息,因此您可以对导致问题的原因进行故障排除
proc options=utilloc;运行
将告诉您将在其中创建临时文件以进行排序的实用程序目录的位置。验证是否有大约3倍于最终表所需空间的可用空间-由于排序的处理方式,排序需要大约3倍的空间才能正确排序数据集
选项压缩如果尚未启用,代码>将节省一些(可能很多)空间
options memsize代码>和选项排序大小
将告诉您为SAS分配了多少内存,以及在内存和磁盘上进行排序的大小sortsize
应该是memsize
的1/3左右(考虑到处理它需要3倍的空间)。如果您的最后一个表已经存在,但刚刚超过sortsize
,如果默认值太低(memsize相同),您最好尝试增加sortsize
您还可能在权限方面存在一些问题;kb文章中的一些其他建议涉及验证您是否确实有权限写入实用程序目录,或者它是否存在。我过去有一个项目,其中资源也是一个问题。
排序时有两种解决方法:
- 不要忘记proc sort有一个TAGSORT选项,它将首先对by语句变量进行排序,然后附加其他所有内容。当by语句中有许多未涉及的列时非常有用
- 索引:如果您为by语句中的变量建立索引,则可以使用by语句而无需排序,它将依赖于索引
- 拆分:您可以将数据集拆分为多个数据块,并分别对每个数据块进行排序。然后执行一个数据步骤,将它们全部放在set语句中。当您在那里也使用by语句时,SAS将编织记录,以便结果也符合by语句
请注意,这些方法会对性能造成影响(可能是第三种,但影响程度较小),如果您以后不考虑它们(或故意破坏它们),索引可能会让您头疼
如果/何时将整个连接重写为SAS合并,请注意:请记住,SAS合并本身并不模拟多对多连接。(一对一、一对多和多对一)这里可能不是这样(很少是这样),但我提到这一点是出于安全考虑。我过去有一个项目,资源也是一个问题。
排序时有两种解决方法:
- 不要忘记proc sort有一个TAGSORT选项,它将首先对by语句变量进行排序,然后附加其他所有内容。当by语句中有许多未涉及的列时非常有用
- 索引:如果您为by语句中的变量建立索引,则可以使用by语句而无需排序,它将依赖于索引
- 拆分:您可以将数据集拆分为多个数据块,并分别对每个数据块进行排序。然后执行一个数据步骤,将它们全部放在set语句中。当您在那里也使用by语句时,SAS将编织记录,以便结果也符合by语句
请注意,这些方法会对性能造成影响(可能是第三种,但影响程度较小),如果您以后不考虑它们(或故意破坏它们),索引可能会让您头疼
如果/何时将整个连接重写为SAS合并,请注意:请记住,SAS合并本身并不模拟多对多连接。(一对一、一对多和多对一)这里可能不是这样(很少是这样),但我提到这一点是出于安全考虑。您能发布准确的错误消息吗?您可能正在到达