Rather than calling PROD in a DO loop, one could use CUSUM:

proc iml;
x = 1:5; /* {1 2 3 4 5} */
p = exp(cusum(log(x))); /* 5! = 120 */
print p;
quit;