我使用的是 SAS 9.1.3(在服务器上),并且有一个宏在数组上循环,以提供一组计算密集型建模步骤,这些步骤将附加到表中。我想知道是否可以为数组的每个元素设置运行的最长时间。这样,任何运行时间超过 3 分钟的元素都会被跳过,并输入下一个项目。
举例来说,我正在使用带有 by 语句的 proc nlin 在大型数据集上为每个类构建单独的模型,并且一个类无法收敛;我如何跳过该类(class)?
有点小众需求,希望有人能帮忙!
最佳答案
我在这里能想到的唯一方法是重写您的代码,以便它在一个或多个 SAS/CONNECT session 中按组与其余部分分开运行,让父 session 在设置的超时后杀死每个 session ,然后重新组合幸存的输出。
正如 Dom 和 Joe 所指出的,这不是一项微不足道的任务,但如果您足够热衷于了解 SAS 的这方面,这是可能的。开始此类事情的一个好地方是此页面:
http://support.sas.com/rnd/scalability/tricks/connect.html
我能够使用那里和其他地方的示例作为简单并行处理框架的基础(巧合的是在 SAS 9.1.3 中!),但是您需要考虑许多细节。为了让您了解沿着这条路线将会遇到的各种冒险:
- 了解如何在您使用的任何基础架构中通过 SAS/CONNECT 登录服务器(常用的自动执行文件是否有效?您需要使用哪些调用选项?)
- 向您的系统管理员/同事解释为什么需要并行运行多个进程
- 管理异步 session
- 在 session 之间同步宏变量、宏定义、库和格式
- 不明显的错误(我无法使用同步库的常用选项,必须通过
调用执行
来推出自己的选项...)
人们可以就这个主题写一篇(冗长的)SUGI 论文,如果你环顾四周,我确信那里有很多这样的论文。
关于macros - 在设定的时间间隔后,在 SAS 宏超时中执行一个步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26607540/