The CALL SYSTEM routine
is similar to the X (or TSO) statement, the X (or TSO) command, the
SYSTEM (or TSO) function, and the %SYSEXEC (or %TSO) macro statement.
In most cases, the X
statement, the X command, or the %SYSEXEC macro statement are preferable
because they require less overhead. However, the CALL SYSTEM routine
can be useful in certain situations because it is executable and because
it accepts expressions as arguments. For example, the following DATA
step executes one of three CLISTs depending on the value of a variable
named ACTION that is stored in an external file named USERID.TRANS.PROG:
data _null_;
infile 'userid.trans.prog';
/* action is assumed to have a value of */
/* 1, 2, or 3 */
/* create and initialize a 3-element array */
input action;
array programs{3} $ 11 c1-c3
("exec clist1" "exec clist2" "exec clist3");
call system(programs{action});
run;
In this example, the
array elements are initialized with character expressions that consist
of TSO commands for executing the three CLISTs. In the CALL SYSTEM
statement, an expression is used to pass one of these character expressions
to the CALL SYSTEM routine. For example, if ACTION equals 2, then
PROGRAMS{2}, which contains the EXEC CLIST2 command, is passed to
the CALL SYSTEM routine.
Under
z/OS, CALL TSO
is an alias for the CALL SYSTEM routine.