如果满足此流程中任何程序中的某些条件,是否有办法停止流程?
我的流程包含5个SAS程序。这个过程计划在每天早上8点运行。但是,有时数据库不会刷新,这个过程会发出奇怪的数字。
我需要"异常控制" ..在第二个程序中,我用一些标准检查数据库。如果没有错误,那么继续运行其余的代码。否则,发送通知电子邮件并停止运行第二个程序和所有后续程序。
我尝试%abort取消,但它只会终止当前程序。后续程序不会受到影响。我可以检查每个程序,但这会使代码变得多余......
我也尝试谷歌"终止SAS流程"但是大多数都提到了abort
没有帮助的陈述......
答案 0 :(得分:2)
如果您正在使用企业指南,则会通过逻辑门将其内置到程序中。
首先,在确定数据库文件是否通过("门程序")的程序中,为宏变量分配基于该测试的值。据推测,这个程序只会做你喜欢的事情,即使它失败了。
在流程页面上,右键单击确定数据库文件是否通过的程序,然后选择'条件 - >添加&#39 ;.
然后根据宏变量添加条件,并使用' equals'和你正在寻找的价值(或者大于'或者任何有意义的东西)。然后在&#34之后选择下一个任务;然后运行此任务&#34 ;;在Else运行此任务之后再添加另一个选项。
然后,无论哪一个是向前移动,都应该链接到你想要运行的其他程序;那个不应该结束这个过程的人。
SAS提供了一个示例,说明如何在KB Sample 39995中执行此操作,包括您可以下载的示例项目。
其次,如果您达到错误条件,则可以设置OBS=0
。这将让SAS继续工作,但在大多数情况下它无法做任何事情(从OBS=0
开始,那么它只能影响任何数据集的0条记录)。我不确定它是否能保证不会做任何事情,但在我所做的一切事情中,这已经足够了。我也使用了OPTIONS ERRORABEND
,如果您使用外部libnames进行所有处理,并且在重新连接SAS时不会自动重新连接,那么它可以正常工作。
答案 1 :(得分:1)
我的理解是,这是一个批处理过程。您未指定要在其上运行进程的操作系统。假设您在UNIX / Linux上运行它(我希望它在Windows上类似)。假设您的5程序进程由以下Shell脚本运行: sas /program1.sas sas /program2.sas sas /program3.sas sas /program4.sas sas /program5.sas
如果您想在program2.sas完成后出现错误或警告后停止剩余的进程,则可以将脚本修改为
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,则整个脚本将由于退出命令而停止。
有关更多信息和代码示例,请参见How to conditionally terminate a SAS batch flow process in UNIX/Linux SAS博客文章。