One issue I always had with the SAS system as a developer was when I had a job that ran in batch that had an error. The SAS System would set the number of observations to zero and go into syntax checking mode for the remainder of the program.
This had some virtues but more often than not, the error was thrown because I had misspelled a variable name in a MEANS statement or FREQ statement that was used for checking my output. This would cause SAS to go into the syntax checking mode and all the rest of my program would not execute even though it was proper.
WPS, when running in batch doesn’t do this but if you want the same effect for your batch jobs, it’s easy enough to implement. Consider the following macro – called %ErrorAbend. %ErrorAbend simply checks that the program is not running in the FOREground and checks the value of the &syserr variable after every PROC or data step and if it returns a value of 3, then issues a note and sets the number of observations to zero.
%macro onerrorabend; %if %eval(&syserr eq 3) and &sysenv NE FORE %then %do; options obs=0; %put NOTE: WPS has been set with OPTION OBS=0 and will continue to check statements. %end; %mend;
Below is a sample program that when run in batch, puts the system into syntax checking mode and basically stops the execution of any downstream statements.
data a b; do ii=1 to 2000; x=ranuni(0)* 10; y=Round(ranuni(0),.01)* 100; z=round(ranuni(0),.01)* 10000; a=ranuni(0)* 10; b=Round(ranuni(0),.01)* 100; c=round(ranuni(0),.01)* 10000; e=ranuni(0)* 10; f=Round(ranuni(0),.01)* 100; g=round(ranuni(0),.01)* 10000; i=ranuni(0)* 10; j=Round(ranuni(0),.01)* 100; k=round(ranuni(0),.01)* 10000; output; end; run; proc freq data=a; tables ik; run; %onerrorabend; proc means data=b; run;
About the author: Phil Rack is President of MineQuest Business Analytics, LLC located in Grand Rapids, Michigan. Phil has been a SAS language developer for more than 25 years. MineQuest provides WPS and SAS consulting and contract programming services and is a authorized reseller of WPS in North America.