I am using PROC MODEL function to solve two unknown variables (delta and T) in two nonlinear equations (shown below). The results I got do not seem right in that values of T for so many observations are same and extremely small (close to zero). Could anyone help me and see what is wrong in my code?
/*proc model data=USE noprint out=WANT;
eq.one = PROBNORM((-log(PD)-(s - (delta*delta)/2)*T)/(delta*sqrt(T)))
-(PD*exp(s*T)* PROBNORM((-log(PD)-(s - (delta*delta)/2)*T)/(delta*sqrt(T))- delta*sqrt(T)))
-(1-PD);
eq.two = delta*PROBNORM((-log(PD)-(s - (delta*delta)/2)*T)/(delta*sqrt(T)))-delta_E*(1-PD);
solve delta T /solveprint;
id firmid date pd s delta_e;
run;*/
Without data and information as to why a specific model and options may have been chosen it is extremely difficult to assess "rightness" of a model.
Small values close to 0 are coming from 1) your data and 2) your model options.
The output, or may you need to request additional output, from the procedure may have some diagnostic hints.
Hi ballardw,
Thanks for your comment. My follow-up question is if I need to set initial values for delta and T for SAS for the calculation. Is the code the correct way for calculation two unknown variables in two equations? I saw someone posted (see the link below) somewhat similar calculation using loop. For my calculation, do I need to use loop?
http://www-personal.umich.edu/~shumway/papers.dir/nuiter99_print.sas
Additional details: I input the results for delta and T back into these two equations. The outcome is not exactly zero. Could anyone help me with this? Thank you in advance!
I don't have access to Proc Model so don't have a way to directly assess options other than reading the documentation.
The issue about taking output and comparing back to another set, especially with your comment about lots of very small values, could well be round-off and precision of storage. With SAS working with basically 16 significant digits for most purposes if the result of the model "should" include values below 1E-16 then the values get truncated or rounded (hard to tell sometimes which).
You might consider a difference of less than 1E-10 or similar close enough to "equal 0" for use.
Notice that the SAS procedure used for comparing data sets, Proc Compare actually has options to set "how close is considered equal" for numeric comparisons, which I use because I create data set weights and often have issues with weights not actually equaling the population they should equal. But the difference is usually less than 1E-8. So I consider them equal as I don't generally expect a difference of 0.00000001 "persons" to be practically significant in my overall results.
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 16. Read more here about why you should contribute and what is in it for you!
Learn how to run multiple linear regression models with and without interactions, presented by SAS user Alex Chaplin.
Find more tutorials on the SAS Users YouTube channel.