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

Is there a way to simulate data points that have been drawn from a Geometric Brownian Motion (Weiner Process)?

I am looking at this function:SAS(R) 9.2 Language Reference: Dictionary, Fourth Edition

But I don't see an option for a Weiner process.

I know the Black Scholes internally simulates a Weiner process but is it possible to see what a set of 10,000 numbers drawn from a Weiner process looks like?

1 ACCEPTED SOLUTION

Accepted Solutions
Rick_SAS
SAS Super FREQ

I'll show you the standard Weiner process (mean=0, std dev=1) and you can generalize it if necessary.

A reference is https://me.ucsb.edu/~moehlis/APC591/tutorials/tutorial7/node2.html

The key observation is that the STEP SIZES of the Weiner process are Gaussian distribution, so you can use the RAND function in the DATA step to simulate the step sizes. In SAS/IML, you can use the RANDGEN or RANDFUN functions to generate the normally distributed step sizes.

proc iml;
/* simulate N time steps from Weiner process on interval [0,Tf] */
N = 1000;
Tf = 5;
call randseed(12345);

/* algorithm: step sizes are normally distributed */
N = N-1;              /* X(0)=0, so N-1 random values */
dt = Tf/N;
sd = sqrt(dt);
steps = randfun(N, "Normal", 0, sd); /* random step sizes */
x = 0 // cusum(steps);               /* X(0)=0 */

View solution in original post

5 REPLIES 5
TomKari
Onyx | Level 15

I suggest you post this under the "SAS Statistical Procedures" and "SAS/IML Software and Matrix Computations" forums, I think you'll be more likely to catch the eye of someone familiar with this topic.


Tom

AnnaBrown
Community Manager

Thanks Tom! eagles_dare13, I moved this thread to the SAS/IML community.

Anna

Rick_SAS
SAS Super FREQ

I'll show you the standard Weiner process (mean=0, std dev=1) and you can generalize it if necessary.

A reference is https://me.ucsb.edu/~moehlis/APC591/tutorials/tutorial7/node2.html

The key observation is that the STEP SIZES of the Weiner process are Gaussian distribution, so you can use the RAND function in the DATA step to simulate the step sizes. In SAS/IML, you can use the RANDGEN or RANDFUN functions to generate the normally distributed step sizes.

proc iml;
/* simulate N time steps from Weiner process on interval [0,Tf] */
N = 1000;
Tf = 5;
call randseed(12345);

/* algorithm: step sizes are normally distributed */
N = N-1;              /* X(0)=0, so N-1 random values */
dt = Tf/N;
sd = sqrt(dt);
steps = randfun(N, "Normal", 0, sd); /* random step sizes */
x = 0 // cusum(steps);               /* X(0)=0 */

eagles_dare13
Obsidian | Level 7

Thank you. I copied your code but am getting:

ERROR: Invocation of unresolved module RANDFUN

Rick_SAS
SAS Super FREQ

Then replace that line with

steps = j(N,1);

call randgen(steps, "Normal", 0, sd); /* random step sizes */

SAS Innovate 2025: Register Now

Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!

Multiple Linear Regression in SAS

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.

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