Great post, Rick, and thanks for the plug! DATA _NULL_ has many uses. One of my favorites uses is in the early processing in macros. Macros can be used to generate statement fragments or statements with some step. That is NOT my application. When a macro is used to generate a full step or a series of steps, you might want to do some preprocessing. For example, you might want to check the integrity of the arguments before doing anything else. This is where DATA _NULL_ comes in. It is much easier to use DATA _NULL_, SYMGET, DATA step statements, and CALL SYMPUTX rather than write a series of %IF, %ELSE, %LET, and other macro statements. If you are going to process values in the macro language over which you have no control, you must quote them to avoid undesirable effects. The code can get complicated. That is never an issue with SYMGET, DATA step statements, and CALL SYMPUTX. A good heuristic--and I am certainly not the first person to say this--is to use the macro language as little as possible. Instead, process and check the values of macro variables in a DATA _NULL_ step.