proc iml;
call randseed(4545); * initialize the stream (like streaminit);
x = J(5000,1,.); * pre-allocate space for random numbers;
call randgen(x,'normal',0,1); * fill x with N(0,1) deviates;
y = y + (x**2 - 3*x**3 + 5x < 1);
p = y / 5000; * MEAN acts on each matrix column;
se = sqrt(y*(1-y)/5000); * VAR, but not STD or STDERR, also acts on columns;
print "IML STEP: estimated mean of sqrt(abs(X)) is" p "with standard error" se; * use PRINT, not PUT;
I'm trying to use monte carlo integration with proc iml to estimate the probability that x**2 - 3*x**3 + 5x is less than 1. What am I doing wrong? Do loops are not allowed by the way. proc iml; start tr(x,y); * create function called tr; /* handle bad case */ /*if x<0 then do; return (.); end; * send back missing;*/ N = nrow(x); dx = x[2:N] - x[1:N-1]; ymean = (y[2:N] + y[1:N-1]) / 2; return(dx` * ymean ); finish tr; x = do(-2,5,0.01); print "Integral of y over x is" ( tr(x,sin(x##2)) ); I keep receiving the (execution) invalid subscript or subscript out of range. How do I solve this problem?
... View more