0
午前4時から午前7時の間に更新するSQLデータベースがあります。私は利用可能なデータを抽出する自動化されたプログラムを実行したい。現在、30分ごとにチェックしています。私はこれを達成するSASプログラムを作成しましたが、コードを凝縮して真のループで実行したいと思います。以下は私の現在のコードです。私はコード1のブロックを合計7回繰り返す。データが最初のチェックで利用可能な場合、私のコードはまだ7回実行されます。私はそれがテーブル内のデータを最初に見つけた後に終了したいと思います。私は執拗にループを作成しようとしましたが、すべての努力で失敗しました。Do WhileまたはDo Untilステートメント内でProc SQLステートメントを実行
%Let RecordCount = 0;/*Sets initial Record Count to 0*/
%Let min = 30;
/私は解決策を見つけることができました0記録/
data _NULL_; /*Get the previous Working Day based on todays date*/
DateCheck = weekday(Today());
Select (DateCheck);
When (1) Do;
call symputx('_ReportDt',intnx('day',Today(),-2));
end;
When (2) Do;
call symputx('_ReportDt',intnx('day',Today(),-3));
end;
otherwise do;
call symputx('_ReportDt',intnx('day',Today(),-1));
end;
end;
run;
/****************************1***************************/
Proc Sql noprint;
Select Count(ACCOUNT_NUMBER)
Into :RecordCount separated by ' '
From Table1
WHere Date = &_ReportDt;
Quit;
data _null_;
if &RecordCount = 0 then do;
wait_sec= (60*&min);
time_slept = sleep(wait_sec,1);
end;
else do;
end;
run;
'%DO'や'%IF'のようなマクロ条件文を使用する場合は、コードをマクロ定義にラップしてからマクロを呼び出して実行する必要があります。それを試しましたか? – Tom
私はしましたが、成功しませんでした。私もマクロを利用して呼び出しを実行しようとしました。 Proc SQlとデータステップを混在させようとしているからですか?私はproc SQLを実行して、レコードが返されているかどうかを確認したいと思います。彼らがプログラムを終了している場合。そうでない場合は、スリープを30分間実行します。 30分後、proc sqlをもう一度実行します。レコードが返された場合は、プログラムを終了し、もう一度30分待って繰り返します。 – Mark