BookmarkSubscribeRSS Feed
trash
Fluorite | Level 6

I'm given these two equations:

                       PDF: f(x) =1/(π(1+x^2))    -∞ ≤ x ≤ ∞                   CDF: F(x) =(1/2) + arctan(x)/π  -∞ ≤ x ≤ ∞
and I am asked to generate 10,000 random numbers using the Inversion Method for Cauchy Distribution.
Here is the code I have started:
PROC IML; 
      n=10000;
      myran = j(n,1, 0); 
      uniform = uniform(myran);
      exponential = (tan(uniform*pi-(pi/2)));
CREATE uniform2 FROM uniform[colname={'x'}];
APPEND FROM uniform;
CREATE exp2 FROM exponential[colname={'y'}];
APPEND FROM exponential;
QUIT;
 
but my log says: "ERROR: (execution) Matrix has not been set to a value." after the exponential statement. 
how do I correct for this? I'm not sure how to account for the -∞ ≤ x ≤ ∞ part. 
subsequently, I am asked to create a subset of the 10000 Cauchy Dist. of random numbers where -10<x<10
 
3 REPLIES 3
WarrenKuhfeld
Ammonite | Level 13

Set the scalar pi to a value after you invoke IML.

pi = constant('pi');
Ksharp
Super User

IML has build-in function, you can use it .

 

proc iml;
x=j(10000,1,.);
call randseed(12345678);
call randgen(x, 'CAUCHY'); 

create want var{x};
append;
close;
quit;
Rick_SAS
SAS Super FREQ

You asked, "how do I account for the [-infinity, infinity] part?" Here is a hint: What is the range of the expression

uniform*pi - pi/2 ?

Ask yourself how the TAN function behaves on this interval.

 

 

For more about the inverse CDF method of simulating data, see "The inverse CDF method for simulating from a distribution."

hackathon24-white-horiz.png

The 2025 SAS Hackathon has begun!

It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.

Latest Updates

From The DO Loop
Want more? Visit our blog for more articles like these.
Discussion stats
  • 3 replies
  • 1969 views
  • 2 likes
  • 4 in conversation