The CALL EXECUTE routine is used to pass text to a code stack. The stack, in this case a macro call, is then executed AFTER the DATA step has finished execution. This is, of course not helpful to your cause.
Your solution will be to tackle this problem a bit differently. There are several approaches to list processing with the macro language. See the following paper by Ron Fehd for more information. http://caloxy.com/papers/72Lists.pdf
The four values in your fixed array are the elements of the macro list. You will process across that list, building the assignment statement for each element using a %DO loop of one form or another.