首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >终止整个流程而不是单个程序

终止整个流程而不是单个程序
EN

Stack Overflow用户
提问于 2016-03-28 03:50:26
回答 2查看 1.3K关注 0票数 3

如果该过程中的任何程序中的某些标准都满足了,是否有方法停止该过程?

我有一个由5个SAS程序组成的过程。这一过程定于每天上午8点开始。但是,有时数据库没有刷新,这个过程会发出奇怪的数字。

我需要“异常控制”。在第二个程序中,我使用一些标准来检查数据库。如果没有错误,那么继续运行其余的代码。否则,发送通知电子邮件,停止运行第二个程序和所有后续程序。

我尝试%中止取消,但它只终止当前程序。后续程序不受影响。我可以签入每个程序,但这会使代码变得多余.

我也尝试过谷歌的“终止SAS进程”,但它们中的大多数引用了abort语句,这无助于.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-28 15:58:19

如果您使用的是企业指南,这是内置在程序通过逻辑门。

首先,在确定数据库文件是否通过/失败的程序中("gate“),根据该测试为一个宏变量分配一个值。据推测,这个程序只会做一些你乐意做的事情,即使它失败了。

在process页面上,右键单击确定数据库文件是否已通过/失败的程序,并选择“条件->添加”。

然后添加一个基于宏变量的条件,并使用“等于”和您想要的值(或“大于”或任何有意义的值)。然后在“然后运行此任务”之后选择下一个任务;并将另一个选项放在“否则运行此任务”之后。

然后,无论两种程序中的哪一种是向前移动的,都应该有指向您想要运行的其余程序的链接;不运行的程序应该结束这个过程。

SAS给出了如何在KB样本39995中这样做的示例,包括一个可以下载的示例项目。

其次,如果达到错误条件,可以设置OBS=0。这将使SAS继续工作,但在大多数情况下它将无法执行任何操作(因为OBS=0,那么它只能影响任何数据集的0条记录)。我不确定这是否能保证它不会做任何事,但在我所做的一切中,这已经足够了。我还使用了OPTIONS ERRORABEND,如果您使用外部libname进行所有处理的话,它工作得很好,当SAS重新连接时,它不会自动重新连接。

票数 2
EN

Stack Overflow用户

发布于 2019-03-07 22:49:23

我的理解是,这是一个批处理过程。您没有指定正在运行进程的操作系统。让我们假设您正在UNIX/Linux上运行它(我希望它在Windows上类似)。让我们假设您的5个程序过程是由以下shell脚本运行的: sas /program1.sas sas /program2.sas sas /program3.sas /program3.sas sas /program4.sas sas /program5.sas

如果您想在program2.sas使用错误或警告完成后停止剩余的进程,则可以将脚本修改为

代码语言:javascript
复制
sas /program1.sas
sas /program2.sas
if [ $? -ne 0 ]
   then
      exit
fi
sas /program3.sas
sas /program4.sas
sas /program5.sas

在这个脚本代码中,有一个特殊的shell脚本变量$?状态代码从SAS的前面命令中传递(0表示成功完成)。如果不是0,则整个脚本会因为exit命令而停止。

有关更多信息和代码示例,请参见如何在UNIX/Linux中有条件地终止SAS批处理流程 SAS博客文章。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36255692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档