如果该过程中的任何程序中的某些标准都满足了,是否有方法停止该过程?
我有一个由5个SAS程序组成的过程。这一过程定于每天上午8点开始。但是,有时数据库没有刷新,这个过程会发出奇怪的数字。
我需要“异常控制”。在第二个程序中,我使用一些标准来检查数据库。如果没有错误,那么继续运行其余的代码。否则,发送通知电子邮件,停止运行第二个程序和所有后续程序。
我尝试%中止取消,但它只终止当前程序。后续程序不受影响。我可以签入每个程序,但这会使代码变得多余.
我也尝试过谷歌的“终止SAS进程”,但它们中的大多数引用了abort语句,这无助于.
发布于 2016-03-28 15:58:19
如果您使用的是企业指南,这是内置在程序通过逻辑门。
首先,在确定数据库文件是否通过/失败的程序中("gate“),根据该测试为一个宏变量分配一个值。据推测,这个程序只会做一些你乐意做的事情,即使它失败了。
在process页面上,右键单击确定数据库文件是否已通过/失败的程序,并选择“条件->添加”。
然后添加一个基于宏变量的条件,并使用“等于”和您想要的值(或“大于”或任何有意义的值)。然后在“然后运行此任务”之后选择下一个任务;并将另一个选项放在“否则运行此任务”之后。
然后,无论两种程序中的哪一种是向前移动的,都应该有指向您想要运行的其余程序的链接;不运行的程序应该结束这个过程。
SAS给出了如何在KB样本39995中这样做的示例,包括一个可以下载的示例项目。
其次,如果达到错误条件,可以设置OBS=0。这将使SAS继续工作,但在大多数情况下它将无法执行任何操作(因为OBS=0,那么它只能影响任何数据集的0条记录)。我不确定这是否能保证它不会做任何事,但在我所做的一切中,这已经足够了。我还使用了OPTIONS ERRORABEND,如果您使用外部libname进行所有处理的话,它工作得很好,当SAS重新连接时,它不会自动重新连接。
发布于 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使用错误或警告完成后停止剩余的进程,则可以将脚本修改为
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博客文章。
https://stackoverflow.com/questions/36255692
复制相似问题