2016-06-17 88 views
1

私は毎日電子メールを送信するエンタープライズガイド7.1でSASプロセスを開発しました(必要な場合)。sasプロセス全体を強制終了する

動作方法は次のとおりです。 [外部プログラム]は、誰に電子メールを送信する必要があるかを指定するファイルを生成します。内容は です。 私のsasプロセスは、次のようになります。 1.このファイルをインポートします。 2.このファイルを操作します。 3.操作されたファイルの内容に基づいて電子メールを生成します。

問題は、ステップ1で、インポート元のファイルが空の場合、すべてがクラッシュし、です。インポートを実行し、データセットが空であるかどうかを確認し、sasプロセスツリー全体を終了するかどうかを確認する方法はありますか?

は私が探したが、無駄にしてきた、事前にありがとうございます。

答えて

0

最善の方法は、マクロで完全にステップ2と3を入れて、唯一STEP1データセットが空でないときにそれを実行することです。あなたの仕事とのセッションを終了するが、それらが不要な副作用を持つことができます両方のステートメント「Endsas」または「中止」を使用することができ、代替として

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; 

一緒に彼らのためにグーグルとき、あなたは簡単にそれらについてのこれらの文や情報を見つけることができますキーワードsas。

2つのステートメントが元々必要だったものですが、最初に投稿した論理的なアプローチをお勧めします。そのようなことが起こっていることをより詳細に管理でき、ステートメント

0

IMOより良い方法は、%runquit;のようなマクロを使用して起動することです。私の答えはここを参照してください。 https://stackoverflow.com/a/31390442/214994

基本的に、run;またはquit;をステップの最後に使用する代わりに、%runquit;を使用します。そのステップでエラーが発生した場合、残りのSASプロセスは中止されます。バッチで実行している場合は、プロセス全体が強制終了されます。インタラクティブに実行している場合、コードの実行は停止しますが、インタラクティブセッションは開いたままです。

EDIT:これは、ファイルが空の場合は、エラーメッセージや警告のいくつかの種類を取得を前提としています。

関連する問題