杀死整个sas进程

杀死整个sas进程,sas,Sas,我在Enterprise Guide 7.1中开发了一个SAS流程,每天发送电子邮件(如果需要) 其工作方式如下: [external program]生成一个文件,指定需要向谁发送电子邮件以及主题 . 我的sas流程如下所示: 1.导入此文件。 2.操纵此文件。 3.根据文件内容生成电子邮件 问题是,如果在步骤1中导入的原始文件为空,则所有内容都会崩溃。是否有办法运行导入,检查数据集是否为空,然后终止整个sas进程树 提前感谢您,我一直在搜索,但没有结果。最好的方法是将步骤2和3完全放在宏中,

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

其工作方式如下: [external program]生成一个文件,指定需要向谁发送电子邮件以及主题 . 我的sas流程如下所示: 1.导入此文件。 2.操纵此文件。 3.根据文件内容生成电子邮件

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


提前感谢您,我一直在搜索,但没有结果。

最好的方法是将步骤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搜索这些语句时,您可以很容易地找到这些语句及其相关信息


虽然这两条语句满足了您最初的需求,但我还是推荐我作为第一条发布的逻辑方法,因为这样可以更好地控制正在发生的事情,并且在处理语句时可以避免一些不良的副作用,所以最好的方法是将步骤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搜索这些语句时,您可以很容易地找到这些语句及其相关信息


尽管这两条语句达到了您最初想要的效果,但我还是建议您使用我作为第一条发布的逻辑方法,因为您可以更好地控制这种方式所发生的事情,并且在使用这些语句时可以避免一些不良副作用。

IMO更好的方法是开始使用类似
%runquit。请看我的答案

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


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

IMO更好的方法是开始使用宏,如
%runquit。请看我的答案

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

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