x is an expression that must have a computational type and should have an arithmetic type.
The RANDOM function returns a random number generated using an expression x as the given seed. If the expression is omitted, the random number is generated using the seed of the last RANDOM function that has a seed. If there is no RANDOM function with a seed invoked before that, the default seed is 1.
If the expression x that is used as a seed is numeric, it must be real. If it is not specified FIXED BINARY(31,0), it is converted.
If x is not greater than 0 and less than 2,147,483,646, the ERROR condition is raised.
The output of RANDOM is a value distributed between 0 and 1. It is generated using the following multiplicative congruential method:
seed(x) = mod(950706376 * seed(x - 1), 2147483647) random(x) = seed(x) / 2147483647
The seed is maintained at the program level.
rand: proc options(main); dcl x float bin (52); dcl i fixed bin (31); put skip list ('---- seed: 10 -------------'); x = random(10); put skip list (x); do i = 1 to 6; x = random(); put skip list (x); end; put skip list ('---- seed: 100000 ---------'); x = random(100000); put skip list (x); do i = 1 to 6; x = random(); put skip list (x); end; end;
will print:
---- seed: 10 ------------- 9.843643940912393E-001 3.341328461347766E-001 1.034361082610842E-001 5.866471489829230E-001 7.405739988854965E-001 3.124010266328235E-001 7.504689692288959E-001 ---- seed: 100000 --------- 2.727828287858436E-001 4.692549409667286E-001 1.388299465825921E-001 3.343486782788991E-001 9.890356291965748E-002 8.330502211270156E-001 3.848663831059199E-001