macros - 在设定的时间间隔后,在 SAS 宏超时中执行一个步骤

标签 macros sas

我使用的是 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/

相关文章:

c++ - 如何在 C++ 中处理 "exit current function, if error on current statement"

c - 为什么只有当值不同而宏名称相同时才会出现宏重新定义错误?

使用类函数宏编译错误

char - SAS 在没有被要求的情况下将字符变量转换为数字

date - 如何在 SAS 中将日期值从日转换为季度

regex - 统计 SAS 中正则表达式匹配者的数量

c++ - 自动销毁堆对象的宏

swift - 是否可以在 Swift 中禁用某些代码行?

sas - 错误: P does not have a numeric suffix (SAS, RENAME)

sql - 在 SAS Proc SQL 语句中使用 Perl 正则表达式