BookmarkSubscribeRSS Feed
crikriek
Calcite | Level 5

Thanks i'll do that Smiley Happy

SteveDenham
Jade | Level 19

Looks like there may be a discrepancy in coding from a text formula, as I get super large values as well, with the test data.  Can you post a link to the formula?

Steve Denham

ballardw
Super User

One thing is to initialize Right to 0 before the loop. If you have x+y and y is missing then the sum result will be missing.

SteveDenham
Jade | Level 19

I still get huge numbers.  I think the code for the formula needs checked.

Steve Denham

crikriek
Calcite | Level 5

Hi everyone !

I'm using the same formula on another database and I think I'm having the following probelm : THe number i cannot go higher than 1030. He writes an error message when nit is higher than 1030. Do you know about that ? Is  there a way to solve it ? Thanks

The code:

Data database.lsvstock3;

set database.lsvstock2;

Af=0;

do i=0 to nit;

AF = comb(nit,i)*(Pt**i)*((1-Pt)**(nit-i))*abs((i/nit)-Pt)+AF;

end;

run;

The log error message:

NOTE: Invalid argument to function COMB at line 570 column 6.

NOTE: Missing values were generated as a result of performing an operation on missing values.

      Each place is given by: (Number of times) at (Line):(Column).

      205291 at 570:17   20144 at 570:59

NOTE: Mathematical operations could not be performed at the following places. The results of the

      operations have been set to missing values.

      Each place is given by: (Number of times) at (Line):(Column).

      205291 at 570:6

NOTE: There were 170 observations read from the data set DATABASE.LSVSTOCK2.

NOTE: The data set DATABASE.LSVSTOCK3 has 170 observations and 11 variables.

NOTE: DATA statement used (Total process time):

      real time           0.24 seconds

      cpu time            0.21 seconds

SteveDenham
Jade | Level 19

Reparameterize using LFACT.

comb(a,b)=fact(a)/(fact(b)*fact(a-b)) so taking logs of both sides

lcomb(a,b)=lfact(a) - lfact(b) - lfact(a-b)  and then exponentiating, I get the following

comb(a,b) = exp (lfact(a) - lfact(b) - lfact(a-b))

You will have to use something other than comb(a,b), but plugging into your formula:

AF = exp (lfact(nit) - lfact(i) - lfact(nit - i)) *(Pt**i)*((1-Pt)**(nit-i))*abs((i/nit)-Pt)+AF;

See if that helps.

Steve Denham

crikriek
Calcite | Level 5

Thank you for your answer, unfortunately it's still not working.

Do you I any idea what the problem could be ?

Thanks

SteveDenham
Jade | Level 19

Is it the same error (overflow when nit>1030)?  You might consider Stirling's approximation then rather than lfact.

AF = exp ((nit * log(nit) - nit) - (i * log(i) -i) - ((nit - i) * log(nit - i) - (nit - i))) *(Pt**i)*((1-Pt)**(nit-i))*abs((i/nit)-Pt)+AF;

If it is something else, I am afraid I am out of ideas.

Steve Denham

crikriek
Calcite | Level 5

Thanks a lot, I tried but  it's still not working.

I think it might be due to the computational limit of my computer

SteveDenham
Jade | Level 19

Yeah.  Stirling's approximation for nit=1030 is 7.9254710873912267781487017602238e+2655.  Might be a problem expressing that.

At this point, Python or Mathematica come to mind...

Steve Denham

What is Bayesian Analysis?

Learn the difference between classical and Bayesian statistical approaches and see a few PROC examples to perform Bayesian analysis in this video.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 24 replies
  • 5356 views
  • 0 likes
  • 4 in conversation