我在SAS 9.1.3上(在服务器上)并在数组上进行宏循环,以提供一组计算密集的建模步骤,这些步骤将附加到表中。我想知道是否可以为数组的每个元素设置最大运行时间。这样就可以跳过运行时间超过3分钟的任何元素,然后输入下一个项目。
比如说我正在使用带有by语句的proc nlin在大型数据集上为每个类构建单独的模型,并且一个类无法收敛;我该如何跳过那个班级?
一点利基要求,希望有人可以协助!
答案 0 :(得分:2)
通常,SAS以线性方式运行。因此,您无法编写一个步骤来监视同一程序中的另一个步骤。您可以做的是在SAS / CONNECT会话中运行您的代码,并使用启动会话的进程监视它。这不是微不足道的,如何超出Stack Overflow的范围。
对于数据步骤,使用datetime()
函数获取当前系统日期和时间。这是以秒为单位测量的。您可以检查数据步骤内的时间。使用stop;
语句停止数据步骤。
现在您特别询问了如何在PROC中打破特定步骤。这必须由SAS开发人员在PROC中实现。如果可能,它将记录在程序的文档中。在http://support.sas.com/documentation/查看SAS文档。
对于PROC NLIN,我不认为在X"之后有一个"休息。参数。您可以使用跟踪参数来跟踪模型执行情况,以查看它挂起的内容。然后,您可以尝试更改收敛参数,以尝试加速缓慢,收敛性很差的模型。
答案 1 :(得分:2)
我能想到的唯一方法是重写你的代码,使其在一个或多个SAS / CONNECT会话中与其他人分开运行,让父会话在设置的超时后终止每一个,然后重新组合幸存的输出。
正如Dom和Joe指出的那样,这不是一项微不足道的任务,但如果您足够热衷于了解SAS的这一方面,那么这是可能的。开始这类事情的好地方就是这个页面:
http://support.sas.com/rnd/scalability/tricks/connect.html
我能够在那里和其他地方使用这些示例作为简单并行处理框架的基础(在SAS 9.1.3中,巧合!),但是您需要考虑许多细节。如果你沿着这条路走下去,就可以了解商店里的各种冒险经历:
call execute
滚动自己...)有人可以写一篇关于这个主题的(冗长的)SUGI论文,如果你环顾四周,我确定它们中有很多。