Although I do not typically blog about undocumented SAS options, I'll make an exception this time. For many years, I have known that the CONTENTS and COMPARE procedures support the BRIEF and SHORT options, but I always forget which option goes with which procedure. For the record, here are the documented options:
- The SHORT option on the PROC CONTENTS statement produces minimal output.
- The BRIEF option on the PROC COMPARE statement produces minimal output. (The BRIEF option is an alias for the longer BRIEFSUMMARY option.)
SAS provides an autocomplete feature that programmers can use to remind themselves which options are supported in each procedure. Both SAS Studio and SAS Enterprise Guide support the autocomplete feature, which displays a list of options as you type SAS code. Unfortunately, I turn off that feature because I find it distracting. Consequently, I cannot remember whether to use SHORT or BRIEF.
My "solution" to this dilemma is to randomly guess an option, run the program, and fix the error if I guessed wrong. I should be wrong 50% of the time, but I noticed that I am wrong only about 25% of the time. Upon investigating, I discovered that some seemingly "wrong" code actually works. Although it is not documented, it turns out that the COMPARE procedure supports the SHORT option as an alias for BRIEFSUMMARY.
This is awesome! No longer do I need to randomly guess the option. I can use the SHORT option in both PROC CONTENTS and PROC COMPARE! As a bonus, the SHORT option is also supported by PROC OPTIONS and PROC DATASETS.
If you have never used the SHORT option before, it's a great time saver because it produces condensed output, as shown in the following examples. For PROC CONTENTS, I like to use the options VARNUM SHORT when I want to display a list of the variables in a data set:
proc contents data=Sashelp.Cars varnum SHORT; /* SHORT is documented option */ run; |
For PROC COMPARE, I use the undocumented SHORT option (which is an alias for BRIEF) when I want to display whether two data sets are equal:
data cars; set Sashelp.cars; run; proc compare base=sashelp.cars compare=cars SHORT; /* SHORT is not documented, but it works */ run; |
As I mentioned, the SHORT option is also supported in PROC OPTIONS. For completeness, here is an example that writes the values of several options to the SAS log:
proc options option=(linesize pagesize memsize _LAST_) SHORT; run; /* SHORT is documented option */ |
LINESIZE=75 PAGESIZE=24 MEMSIZE=17179869184 _LAST_=WORK.CARS |
In short (see what I did there?), you can use the SHORT option in several Base SAS procedures. If you can't remember that the SHORT option applies to PROC CONTENTS and the BRIEF option applies to PROC COMPARE, just use the SHORT option in both procedures and in PROC OPTIONS, too.
3 Comments
Thank you, Rick! Now the SHORT option is somewhat documented for PROC COMPARE, at least by this blog post.
Great post as always Rick, but I'd caution that PROC COMPARE is quirky about missing data and the SHORT option could result in an oversight.
Here's the PROC COMPARE SHORT output when comparing sashelp.cars to a copy data set with the 'Length' variable removed (code below):
NOTE: No unequal values were found. All values compared are exactly equal.
The note at bottom of PROC COMPARE output could more accurately be read as "all values that were able to be compared were found to be equal," which is not the same as "these data sets are identical." This variable mismatch only appears in the "Variable Summary" section of PROC COMPARE output, which reads (in part) "Number of Variables in SASHELP.CARS but not in WORK.NOLENGTH: 1."
Sample code is below:
data noLength;
set sashelp.cars;
drop length;
run;
title 'PROC COMPARE SHORT with missing variable';
proc compare base=sashelp.cars compare=noLength SHORT;
run;
title 'PROC COMPARE with missing variable';
proc compare base=sashelp.cars compare=noLength;
run;
title;
Thanks for the tip. Your warning applies to using the BRIEF option, regardless of whether you use BRIEF or SHORT to invoke the option. Caveat emptor!