If you run something like the following in batch mode you might be a bit surprised at the results:
data junk;
do i = 1 to 10;
output;
end;
run;
* purposeful error in this libname and data step;
libname s "sdfasdfjsadf/";
data junk2;
set s.something;
run;
* SAS will now set obs=0 and go into "syntax check mode"
whatever that's supposed to mean...;
* but look what happens here;
proc sql;
insert into junk
set i = 11;
quit;
So SAS sets obs=0 and enters syntax check mode,
but the SQL insert still executes. I am pretty sure SQL insert, update and delete will all be executed. It makes sense if you consider that obs=0 is an option that affects input not output; ie, it limits the observations being read into a step not being output. But still, it's a little counter-intuitive that "syntax check mode" would even allow a step to execute at all...
As far as I know, the only real way around this is to wrap your code in a macro and check the value of &SYSERR before any steps you DEFINETLY do not want executed if there is an error. Could this be another opportunity to use %GOTO?