/***************************************************************************\ * MACRO: ds_wait, wait for access to a dataset * * * * Author: Richard A. DeVenezia, 10/1/92 * * * * Purpose: Check a dataset for accessibility, if it is not * * (generally not available if dataset is * * concurrently open) wait &seconds (upto 10 times) * * * * Arguments: data - Dataset name to check * * seconds - How long to wait before retrying * \***************************************************************************/ /*----- * group: Data management * purpose: Wait for a data set to become available for exclusive lock * notes: Useful when rebuilding or appending with merge during a batch job. Uses UNIX sleep. Will endsas if data not available after 10 waits. */ %macro ds_wait ( data, seconds); options nonotes nomprint; %local N N_STOP; %let N = 0; %let N_STOP = 10; %do %until (&syserr=0); data _null_; call symput('time', put (time(), time8.)); run; data _null_; set &data; stop; run; %if (&syserr ne 0) %then %do; %put &time Could not acess &data; %put SYSERR=&syserr, will wait &seconds seconds and try again; run; %let N = %eval(&N+1); %if &N = &N_STOP %then %do; %put Aborting after &N retries on &data; endsas; %end; %else %do; x "sleep &seconds"; %end; %end; %else %put &time &data is accessible; %end; options notes mprint; %mend;