Pyrite | Level 9

## ERROR: Execution error as noted previously. (rc=100)

Please can anyone help correct this code for me::

Data sim;

Input A B C Beta;

cards;

1 3  3  0.5

2 7  4  0.5

3 10 3  0.5

4 12 6  0.5

;

Run;

proc iml;

use sim;

read all  var{A B C} into DM;

close;

A = DM[,1]; B = DM[,2]; C = DM[,3];  Beta = DM[,4];

n = nrow(DM);

start Func(x);

return(  exp(x-1)*exp(2-x +Beta*C)#(cdf("Normal", x-10+Beta*C)-cdf("Normal", x-4+C)));

finish;

do i = 1 to nrow(DM);

call quad(result, "Func", A || B,);

end;

create kaplan1n var{A  B C Beta Answer };

append;

quit;

LOG FILE

114  proc iml;

115  use sim;

116  read all  var{A B C} into DM;

117  close;

NOTE: Closing WORK.SIM

118  A = DM[,1];

118!             B = DM[,2];

118!                         C = DM[,3];

118!                                      Beta = DM[,4];

ERROR: (execution) Invalid subscript or subscript out of range.

operation : [ at line 118 column 47

operands  : DM, , *LIT1005

DM      4 rows      3 cols    (numeric)

1         3         3

2         7         4

3        10         3

4        12         6

*LIT1005      1 row       1 col     (numeric)

4

statement : ASSIGN at line 118 column 38

119  n = nrow(DM);

120  start Func(x);

121     return(  exp(x-1)*exp(2-x +Beta*C)#(cdf("Normal", x-10+Beta*C)-cdf("Normal",

121! x-4+C)));

122  finish;

NOTE: Module FUNC defined.

124  do i = 1 to nrow(DM);

125  call quad(result, "Func", A || B,);

127  end;

ERROR: (execution) Matrix has not been set to a value.

operation : [ at line 121 column 37

operands  : C, i

C      0 row       0 col     (type ?, size 0)

i      0 row       0 col     (type ?, size 0)

statement : RETURN at line 121 column 4

traceback : module FUNC at line 121 column 4

Convergence could not be attained over the subinterval

(1 , 3 )

The function might have one of the following:

1) A slowly convergent or a divergent integral.

2) Strong oscillations.

3) A small scale in the integrand: in this case

you can change the independent variable

in the integrand, or,

provide the optional vector describing roughly

the mean and the standard deviation of the

integrand

4) Points of discontinuities in the interior

in this case, you can provide a vector containing

the points of discontinuity and try again.

ERROR: Execution error as noted previously. (rc=100)

operation : QUAD at line 125 column 1

operands  : *LIT1014, _TEM1003,

*LIT1014      1 row       1 col     (character, size 4)

Func

_TEM1003      1 row       2 cols    (numeric)

1         3

statement : CALL at line 125 column 1

128  create kaplan1n var{A  B C Beta Answer };

129  append;

130  quit;

NOTE: Exiting IML.

NOTE: The data set WORK.KAPLAN1N has 4 observations and 5 variables.

NOTE: The SAS System stopped processing this step because of errors.

NOTE: PROCEDURE IML used (Total process time):

real time           0.03 seconds

cpu time            0.03 seconds

1 ACCEPTED SOLUTION

Accepted Solutions
SAS Super FREQ

## Re: ERROR: Execution error as noted previously. (rc=100)

start Func(x) global( Beta_i, C_i );

return(  exp(-x)*exp(2-x +Beta_i*C_i)#(cdf("Normal", x-2+Beta_i*C_i)-cdf("Normal", x-1+C_i)) );

finish;

do i = 1 to nrow(DM);

Beta_i = Beta; C_i = C; /* set global variables */

call quad(result, "Func", A || B,);

end;

Here is a blog post that describes the GLOBAL statement and why it is necessary:

8 REPLIES 8
SAS Super FREQ

## Re: ERROR: Execution error as noted previously. (rc=100)

Try reading four variables into DM:

read all  var{A B C Beta} into DM;

or

read all var _NUM_ into DM;

By the way, you never use DM for anything except for finding the length of obervations. You could save yourself some trouble if you read the data like this:

use sim  nobs n;       /* n contains number of observations */

read all  var{A B C Beta};  /* A B C and Beta are defined as vectors */

close;

Pyrite | Level 9

## Re: ERROR: Execution error as noted previously. (rc=100)

Hello Rick, Thanks for the help. I did that but still having issue:

I think the problem is with this line :  return(  exp(x-1)*exp(2-x +Beta*C)#(cdf("Normal", x-10+Beta*C)-cdf("Normal", x-4+C)));

Data sim;

Input A B C Beta;

cards;

1 3  3  0.5

2 7  4  0.5

3 10 3  0.5

4 12 6  0.5

;

Run;

proc iml;

use sim;

read all var _NUM_ into DM;

close;

A = DM[,1]; B = DM[,2]; C = DM[,3];  Beta = DM[,4];

n = nrow(DM);

start Func(x);

return(  exp(x-1)*exp(2-x +Beta*C)#(cdf("Normal", x-10+Beta*C)-cdf("Normal", x-4+C)));

finish;

do i = 1 to nrow(DM);

call quad(result, "Func", A || B,);

end;

create kaplan1n var{A  B C Beta Answer };

append;

quit;

SAS Super FREQ

## Re: ERROR: Execution error as noted previously. (rc=100)

Think carefully when you get an error. Does the error message give useful information that would help you debug the problem yourself?  In this case, 'i' is not defined in the function, so C is undefined.

To help you out, here are some blog posts where I have discussed error messages and how to interpret them:

Pyrite | Level 9

## Re: ERROR: Execution error as noted previously. (rc=100)

Hello Rick, Thanks for the help. I tried to fix it , however it runs without error but there is no answer because it never converges.

Data sim;

Input A B C Beta;

cards;

1 2  7  0.5

1 2.5  9  0.5

1 2.5 8  0.5

1 3  9  0.5

;

Run;

proc iml;

use sim;

read all var _NUM_ into DM;

close;

A = DM[,1]; B = DM[,2]; C = DM[,3];  Beta = DM[,4];

n = nrow(DM);

start Func(x);

do i = 1 to nrow(DM);

return(  exp(-x)*exp(2-x +Beta*C)#(cdf("Normal", x-2+Beta*C)-cdf("Normal", x-1+C)));

end;

finish;

do i = 1 to nrow(DM);

call quad(result, "Func", A || B,);

end;

create kaplan1n var{A  B C Beta Answer };

append;

quit;

LOG FILE

417  Data sim;

418  Input A B C Beta;

419  cards;

NOTE: The data set WORK.SIM has 4 observations and 4 variables.

NOTE: DATA statement used (Total process time):

real time           0.06 seconds

cpu time            0.00 seconds

424  ;

425  Run;

426  proc iml;

427  use sim;

428  read all var _NUM_ into DM;

429  close;

NOTE: Closing WORK.SIM

430  A = DM[,1];

430!             B = DM[,2];

430!                         C = DM[,3];

430!                                      Beta = DM[,4];

431  n = nrow(DM);

432

433  start Func(x);

434  do i = 1 to nrow(DM);

435     return(  exp(-x)*exp(2-x +Beta*C)#(cdf("Normal", x-2+Beta*C)-cdf("Normal",

435! x-1+C)));

436  end;

437  finish;

NOTE: Module FUNC defined.

439  do i = 1 to nrow(DM);

440  call quad(result, "Func", A || B,);

442  end;

Convergence could not be attained over the subinterval

(1 , 2 )

The function might have one of the following:

1) A slowly convergent or a divergent integral.

2) Strong oscillations.

3) A small scale in the integrand: in this case

you can change the independent variable

in the integrand, or,

provide the optional vector describing roughly

the mean and the standard deviation of the

integrand

4) Points of discontinuities in the interior

in this case, you can provide a vector containing

the points of discontinuity and try again.

Convergence could not be attained over the subinterval

(1 , 2.5 )

The function might have one of the following:

1) A slowly convergent or a divergent integral.

2) Strong oscillations.

3) A small scale in the integrand: in this case

you can change the independent variable

in the integrand, or,

provide the optional vector describing roughly

the mean and the standard deviation of the

integrand

4) Points of discontinuities in the interior

in this case, you can provide a vector containing

the points of discontinuity and try again.

Convergence could not be attained over the subinterval

(1 , 2.5 )

The function might have one of the following:

1) A slowly convergent or a divergent integral.

2) Strong oscillations.

3) A small scale in the integrand: in this case

you can change the independent variable

in the integrand, or,

provide the optional vector describing roughly

the mean and the standard deviation of the

integrand

4) Points of discontinuities in the interior

in this case, you can provide a vector containing

the points of discontinuity and try again.

Convergence could not be attained over the subinterval

(1 , 3 )

The function might have one of the following:

1) A slowly convergent or a divergent integral.

2) Strong oscillations.

3) A small scale in the integrand: in this case

you can change the independent variable

in the integrand, or,

provide the optional vector describing roughly

the mean and the standard deviation of the

integrand

4) Points of discontinuities in the interior

in this case, you can provide a vector containing

the points of discontinuity and try again.

443  create kaplan1n var{A  B C Beta Answer };

444  append;

445  quit;

NOTE: Exiting IML.

NOTE: The data set WORK.KAPLAN1N has 4 observations and 5 variables.

NOTE: PROCEDURE IML used (Total process time):

real time           0.15 seconds

cpu time            0.11 seconds

SAS Super FREQ

## Re: ERROR: Execution error as noted previously. (rc=100)

1) DM is not defined in the function

2) You can't loop over several RETURN statements. When IML hits the first RETURN statement, it jumps out of the loop and returns.

3) Are you trying to return a vector from the "Func" function? The QUAD function expects the function to return a scalar quantity.

It would be useful if you could explain in words what you are trying to accomplish.  Then we can create SAS/IML statements that reflect the statistical or mathematical objectives.

Pyrite | Level 9

## Re: ERROR: Execution error as noted previously. (rc=100)

Hello Rick,

Thank you, I am just trying to integrate this function exp(x-1)*exp(2-x +Beta*C)#(cdf("Normal", x-10+Beta*C)-cdf("Normal", x-4+C))) numerical and have an answer for each row. The only contant is "BETA" which is 0.5.  The limit is A and B that changes for each row. Also C changes for each row. I want to return a scalar. However, once I have additional variable on each row like in the case above, it doesnt give me any answer or runs with error.

My question is how to incorporate the variable C into the integral??

I want to to something similar like the code below, just that in this case I have a additional variable C in the exponential funtion and CDF:

Data sim;

Input A B;

cards;

1 3

2 7

3 10

4 12

;

Run;

proc iml;

use sim;

read all  var{A B} into DM;

close;

A = DM[,1]; B = DM[,2];

n = nrow(DM);

start Func(x);

return(  exp(2-x)#cdf("Normal", x) );

finish;

do i = 1 to nrow(DM);

call quad(result, "Func", A || B,);

end;

create kaplan1n var{A  B Answer };

append;

quit;

SAS Super FREQ

## Re: ERROR: Execution error as noted previously. (rc=100)

start Func(x) global( Beta_i, C_i );

return(  exp(-x)*exp(2-x +Beta_i*C_i)#(cdf("Normal", x-2+Beta_i*C_i)-cdf("Normal", x-1+C_i)) );

finish;

do i = 1 to nrow(DM);

Beta_i = Beta; C_i = C; /* set global variables */

call quad(result, "Func", A || B,);

end;

Here is a blog post that describes the GLOBAL statement and why it is necessary:

Pyrite | Level 9

## Re: ERROR: Execution error as noted previously. (rc=100)

Thanks a lot Rick, I will read the blog as well

From The DO Loop