//VSAMJOB ...job accounting info...
// EXEC SAS,OPTIONS='VSAMREAD VSAMLOAD SYSIN=INSAS'
//INSAS DD *
/* Allocate the required ddnames for idcams. */
filename sysin '&temp' lrecl=80 blksize=6160 recfm=fb;
filename sysprint sysout=*;
%macro vsamchk(dsn);
/* First make sure cluster exists. If it does, then */
/* sysfilrc will be 0; else, sysfilrc will be 10005. */
filename myfile vsam "&dsn";
%if &sysfilrc ne 0 %then
%put 'vsam file does not exist';
%else %do;
/* The file does exist. Now check use idcams to see if */
/* there are records. If there are, then sysrc will be 0; */
/* otherwise, it will be 12. */
data _null_;
file sysin;
x=upcase("verify dataset(&dsn)");
put @2 x;
proc idcams;
run;
%end;
%mend ;
%vsamchk(your.vsam.cluster);
%macro runcode;
%if &sysfilrc=0 and &sysrc=0 %then %do;
/* The file did exist, and it contained records. Put */
/* your normal code path that processes the vsam */
/* cluster here. */
%end;
%else %if &sysfilrc=0 and &sysrc=12 %then %do;
/* The file did exist, but it was empty. In this */
/* example we write a dummy record to the file to */
/* handle this situation. Whatever you decide to do, */
/* the logic would go here. */
data _null_;
file 'your.vsam.cluster' vsam;
put 'add a record';
run;
%end;
%else %if &sysfilrc ne 0 %then %do;
/* The file did not exist. In this example we */
/* write a note to the log and stop the job. */
/* whatever you decide to do, the logic would */
/* go here. */
data _null_;
put 'the file does not exist - stop the job';
stop;
run;
%end;
%else %do;
/* This catches all other values of sysfilrc */
/* and sysrc. If we get here the user needs to */
/* check errors or warnings in the saslog. */
data _null_;
put '*** check the saslog for warnings or errors';
run;
%end;
%mend runcode;
%runcode;