BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
eagles_dare13
Obsidian | Level 7

I wish to simulate(generate) a list of random numbers, where I specify the number of observations that I wish, the underlying distribution(normal,lognormal), the mean, the std. deviation and I want as  output a list of random numbers from this distribution.

Further I wish to draw a probability plot of these numbers, conforming to stathe distribution that they were drawn from.

How to do it in SAS?

1 ACCEPTED SOLUTION

Accepted Solutions
Rick_SAS
SAS Super FREQ

This is found in Chapter 2 of Simulating Data with SAS. In the DATA step, use the RAND function within a loop to generate the data. Use the PROPPLOT statement in the UNIVARIATE procedure to construct the probability plot:

data Random;

N = 100;    /* sample size */

family = "Normal";  /* or "Lognormal" */

mean = 8;

stdDev = 3;

do i = 1 to N;

   x = rand(family, mean, stdDev);

   output;

end;

run;

/* draw propability plot */

proc univariate data=Random;

var x;

probplot x / square normal; /* or lognormal; optionally specify popluation parameters */

run;

View solution in original post

8 REPLIES 8
M_Maldonado
Barite | Level 11

This book is essential for what you want to do. Absolutely recommended!

Simulating Data with SAS® by

Astounding
PROC Star

This might be a good place to start:

http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000202908.htm

The example in the "Details" section is pretty close to one of your objectives.

Rick_SAS
SAS Super FREQ

This is found in Chapter 2 of Simulating Data with SAS. In the DATA step, use the RAND function within a loop to generate the data. Use the PROPPLOT statement in the UNIVARIATE procedure to construct the probability plot:

data Random;

N = 100;    /* sample size */

family = "Normal";  /* or "Lognormal" */

mean = 8;

stdDev = 3;

do i = 1 to N;

   x = rand(family, mean, stdDev);

   output;

end;

run;

/* draw propability plot */

proc univariate data=Random;

var x;

probplot x / square normal; /* or lognormal; optionally specify popluation parameters */

run;

eagles_dare13
Obsidian | Level 7

Thanks. How come the probplot does not represent a bell curve but more like a 45 degree straight line?

WendyCzika
SAS Employee

The probplot isn't plotting the distribution of x, but a probability plot, similar to a Q-Q plot.  This is from the doc:

The PROBPLOT statement creates a probability plot, which compares ordered variable values with the percentiles of a specified theoretical distribution. If the data distribution matches the theoretical distribution, the points on the plot form a linear pattern. Consequently, you can use a probability plot to determine how well a theoretical distribution models a set of measurements.

eagles_dare13
Obsidian | Level 7

Thanks. How to get the plot of the distribution? I am looking for something like xyplot(x, p);

Rick_SAS
SAS Super FREQ

You can get a histogram of the simulated sample by using the HISTOGRAM statement in PROC UNIVARIATE. To overlay a line plot of the distribution, specify the distribution name and any known parameters after a "slash" (/) :

histogram x / normal; /* or lognormal; optionally specify popluation parameters */

Ready to join fellow brilliant minds for the SAS Hackathon?

Build your skills. Make connections. Enjoy creative freedom. Maybe change the world. Registration is now open through August 30th. Visit the SAS Hackathon homepage.

Register today!
How to choose a machine learning algorithm

Use this tutorial as a handy guide to weigh the pros and cons of these commonly used machine learning algorithms.

Find more tutorials on the SAS Users YouTube channel.

Discussion stats
  • 8 replies
  • 3649 views
  • 6 likes
  • 5 in conversation