2016-03-28 60 views
1

如果满足此过程中的任何程序中的某些条件,是否可以停止该流程?终止整个流程而不是单个程序

我有一个由5个SAS程序组成的进程。这个过程计划在每天早上8点运行。但是,有时数据库不会刷新,这个过程会发出奇怪的数字。

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

我尝试%中止取消但它只是终止当前的程序。后续的程序不受影响..我可以检查每一个程序,但这使得代码冗余......

我也尝试谷歌“终止SAS过程”,但他们大多数是指abort声明不帮助...

+0

你看过停止声明吗? – InfiniteFlashChess

+0

你试过'%abort abend'或'%abort return'吗? –

+0

@DominicComtois这两个只停止当前会话..不为以下几个...是的我试过..他们不工作.. – Lovnlust

回答

1

如果您使用的是Enterprise Guide,它通过逻辑门构建到程序中。

首先,在确定数据库文件是否通过(“门程序”)的程序中,根据该测试为宏变量赋值。据推测,这个程序只会做你感到高兴的事情,即使它失败了。

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

然后添加一个基于宏变量的条件,并使用'equals'和您正在查找的值(或'大于'或任何有意义的值)。然后在“然后运行此任务”之后选择下一个任务;并在Else运行此任务后放置其他选项。

然后,无论哪一个向前移动,都应该链接到您想要运行的程序的其余部分;不应该结束这个过程。

SAS给出了一个示例,说明如何在KB Sample 39995中执行该操作,包括您可以下载的示例项目。


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