Macros 在设定的时间间隔后,在SAS宏超时中执行步骤

Macros 在设定的时间间隔后,在SAS宏超时中执行步骤,macros,sas,Macros,Sas,我在SAS 9.1.3(服务器上)上,有一个宏在数组上循环,以提供一组计算密集的建模步骤,这些步骤被附加到一个表中。我想知道是否可以为数组的每个元素设置最长运行时间。这是为了跳过运行时间超过3分钟的任何元素,并输入下一个项目 比如说,我使用一个proc nlin和一个by语句在一个大数据集上为每个类构建单独的模型,其中一个类无法收敛;我怎么跳过那节课 有点利基的要求,希望有人能帮助 通常,SAS以线性方式运行。因此,您不能编写一个步骤来监视同一程序中的另一个步骤。您可以在SAS/CONNECT会

我在SAS 9.1.3(服务器上)上,有一个宏在数组上循环,以提供一组计算密集的建模步骤,这些步骤被附加到一个表中。我想知道是否可以为数组的每个元素设置最长运行时间。这是为了跳过运行时间超过3分钟的任何元素,并输入下一个项目

比如说,我使用一个proc nlin和一个by语句在一个大数据集上为每个类构建单独的模型,其中一个类无法收敛;我怎么跳过那节课


有点利基的要求,希望有人能帮助

通常,SAS以线性方式运行。因此,您不能编写一个步骤来监视同一程序中的另一个步骤。您可以在SAS/CONNECT会话中运行代码,并使用启动会话的进程对其进行监视。这并不是一件小事,操作方法超出了堆栈溢出的范围

对于数据步骤,使用
datetime()
函数获取当前系统日期和时间。这是以秒为单位的。您可以检查数据步骤中的时间。使用
Stop停止数据步骤语句

现在,您特别询问了如何在过程中中断特定步骤。这必须由SAS开发人员在PROC中实现。如果可能,将记录在程序文件中。查看SAS文档,网址为


对于PROC NLIN,我认为不存在“X后中断”参数。您可以使用跟踪参数来跟踪模型执行,以查看它挂起了什么。然后,您可以更改收敛参数,以尝试加快缓慢、严重收敛的模型。

我在这里能想到的唯一方法是重写代码,使其在一个或多个SAS/CONNECT会话中按组独立运行,并在设置的超时后让父会话杀死每一个,然后重新组合剩余的输出

正如Dom和Joe所指出的,这不是一项琐碎的任务,但是如果您足够热衷于学习SAS的这一方面,这是可能的。这一页是开始这类工作的好地方:

<>我能够使用例子和其他地方作为一个简单的并行处理框架的基础(在Saa1.1.3,巧合),但是有很多细节你需要考虑。如果你沿着这条路线走下去,给你一个关于未来各种冒险的想法:

  • 学习如何在您正在使用的任何基础架构中通过SAS/CONNECT登录到您的服务器(通常的autoexec文件会工作吗?您需要使用哪些调用选项?)
  • 向系统管理员/同事解释为什么需要并行运行多个进程
  • 管理异步会话
  • 在会话之间同步宏变量、宏定义、库和格式
  • 模糊的bug(我无法使用通常的同步库选项,只能通过
    调用execute
    …)

你可以写一篇关于这个话题的(冗长的)SUGI论文,如果你环顾四周,我肯定会有很多

您还可以使用SAS之外的程序来监视进程监视器并终止SAS进程,尽管这可能有些过分。我对跟踪参数的问题是,proc步骤根本没有返回任何内容。这个步骤挂起太久了,我不得不终止sas进程。试着缩小问题范围,找出问题所在。如果你可以说,这些数据运行,而这些数据不运行,那么找出原因应该不会太难。如果您认为这是一个SAS错误,那么请向SAS TS提交一张票据。^^这可能是我将采用的方法。我试图将其自动化,以便检查日志以查看哪组数据未运行。看样子,我只能通过一次喂一组来手动完成。这是一个很好的答案,尽管这可能超出了我的能力。不过还是要谢谢你的帮助!