杀死一个完整的sas进程

时间:2016-06-17 21:50:13

标签: sas

我在Enterprise Guide 7.1中开发了一个SAS流程,每天发送电子邮件(如果需要)。

它的工作方式是: [外部程序]生成一个文件,指定需要通过电子邮件发送的人和主题 。 我的sas过程看起来像这样:  1.导入此文件。  2.操纵这个文件。  3.根据被操纵文件的内容生成电子邮件。

问题是,如果在步骤1中导入的原始文件为空,则一切都会崩溃。有没有办法运行导入,检查数据集是否为空,然后是否终止整个sas进程树?

提前感谢您,我一直在搜索,但无济于事。

2 个答案:

答案 0 :(得分:0)

最好的方法是将第2步和第3步完全放在宏中,只在第1步数据集不为空时执行它。

step 1 import file in dataset mydata

data _null_;
set mydata nobs=number;
call symput('mydata_count', number);
stop;
run;


%macro m;
%if &mydata_count > 0 %then %do;

step 2  manipulate this file

step 3 generate emails

%end;
%mend;

%m;

作为替代方案,您可以使用语句“Endsas”或“abort”来终止您的工作和会话但是它们可能有不必要的副作用,您可以在使用关键字sas搜索它们时轻松找到这些语句和有关它们的信息。

尽管这两个陈述完成了你原本想要的,但我会推荐我首先发布的逻辑方法,因为你可以更好地控制正在发生的事情,并且在处理语句时可以避免一些不良的副作用< / p>

答案 1 :(得分:0)

IMO更好的方法是开始使用像%runquit;这样的宏。在这里看到我的答案。 https://stackoverflow.com/a/31390442/214994

基本上,您不是在步骤结束时使用run;quit;,而是使用%runquit;。如果在该步骤中发生任何错误,则SAS流程的其余部分将被中止。如果批量运行,整个过程都会被终止。如果以交互方式运行,代码执行将停止,但您的交互式会话仍保持打开状态。

编辑:如果文件为空,则假定您收到某种错误消息或警告。