The %check_for_warnings Macro

Here's a little macro I developed that you can call anywhere in your SAS program to check to see if any warning messages have been issued in the SAS log up to that point.  If a warning message has been issued, this macro gracefully terminates the SAS program at that point.  Why would you want to do this?  Here's an example.  I have a program that creates a dashboard using ODS LAYOUT with ODS graphics, SAS/GRAPH, PROC REPORT, and other procedures under the hood.  Sometimes, the data you are receiving or extracting can cause unanticipated changes in your dashboard.  For example, a table might be suppressed because it suddenly has more rows than you have ever had before and it no longer fits in the region allotted to it, requiring some changes to the dashboard.  Do you really want to email out to dozens of people a dashboard report that is malformed or missing whole sections?  Of course not!  Chances are, when this happens, SAS has issued one or more warning messages, and this macro will allow you to abort the program before the report is emailed out or otherwise distributed.

************************************;
* Macro Name: %check_for_warnings         *;
* Last Updated: 12/04/14 by David Oesper  *;
************************************;
%macro check_for_warnings;
%if %sysevalf(%superq(syswarningtext) ne,boolean) %then %do;
%if %superq(syswarningtext) ne Warning message encountered, terminating SAS program %then %do;
%put WARNING: Warning message encountered, terminating SAS program;
%abort cancel;
%end;
%end;
%mend check_for_warnings;
.
.
.
%check_for_warnings;  /* located at a point in your program where you want to terminate your SAS program if any warning has occurred, for example, right before an email step */