In reply to Nat Wooding.

Actually there is a case on the mainframe (as well as all other OSs) where a RUN is needed. If you are creating a macro variable using CALL SYMPUT and then immediately using that macro variable. For instance:
data _null_;
set sasuser.heart;
call symput ('mvar', weight);

%put weight is &mvar;

without having a step boundary, such as a RUN statement to complete the DATA step, the macro variable doesn't get created in time for the macro variable reference to use it.