Many times when Call execute() is used the parameter is a call to a macro and the step containing the call is used to insert parameters for the macro. This usually involves some sort of messy concatenation or substitution. In my proposal,
Call Mexecute () could have one or more parameters
The first parameter would be the name of the macro to be executed (without the "%" of course). It could be a character variable or a literal
Remaining parameters could be a mix of character or numeric
The call would interpret parameters 2 - n (if any) as parameters to pass to the macro when executed.
Numeric parameters would be converted to character and stripped of leading blanks
Call Mexecute would then behave like Call Execute() with the parameters assembled into a macro call with the specified parameters
In effect Call Mexecute (parm1, parm2, ...parmn) would be equivalent to Call Execute (cats('%',parm1,'(', catx(",", parm2, ..., parmn), ');') ) [untested] or the like.