🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
Calcite | Level 5

## Vector parameters behaving as scalars in RANDGEN for Binomial distribution

Although the RANDGEN function should work on a vector of parameters, it doesn't give me the intended results. Even after generating a full matrix of parameter p in the code below by repeating the row vector (effectively a N*M matrix), the results clearly suggest that p is being taken as a scalar i.e. only the first element of p=0.1 from the matrix is used for whole matrix. I want to generate random numbers from a different distribution in each column.

%let N = 100;
%let M= 3;
proc iml;
call randseed(123);
x = j(&N,&M);
y = j(&N,&M);
p= j(1, &M);/*specify row vector*/
p= {.1 .2 .5}; /*Probability*/
p_mat = repeat(p, &N); /*Repeat probability parameter for j(&N,&M) matrix*/
call randgen(x, "Binomial",p_mat,&N );
x=x/&N;
mean=mean(x);
max=max(x);
print p,mean,max;
Quit;

RESULT:

p

 0.1 0.2 0.5

mean

 0.1014 0.1001 0.1075

max

 0.2
1 ACCEPTED SOLUTION

Accepted Solutions
SAS Super FREQ

## Re: Vector parameters behaving as scalars in RANDGEN for Binomial distribution

Read the documenation for the RANDGEN subroutine, which states:

All parameters must be the same length. You cannot specify a scalar for one parameter and a vector for another. If you pass in parameter vectors that do not satisfy one of the above conditions, then the first element of each parameter is used.

``````proc iml;
call randseed(123);
x = j(&N,&M);
p = {.1 .2 .5}; /*Probability*/
N = repeat(&N, 1, &M);
call randgen(x, "Binomial", p, N);
x=x/&N;
mean=mean(x);
print p, mean;
``````
2 REPLIES 2
SAS Super FREQ

## Re: Vector parameters behaving as scalars in RANDGEN for Binomial distribution

Read the documenation for the RANDGEN subroutine, which states:

All parameters must be the same length. You cannot specify a scalar for one parameter and a vector for another. If you pass in parameter vectors that do not satisfy one of the above conditions, then the first element of each parameter is used.

``````proc iml;
call randseed(123);
x = j(&N,&M);
p = {.1 .2 .5}; /*Probability*/
N = repeat(&N, 1, &M);
call randgen(x, "Binomial", p, N);
x=x/&N;
mean=mean(x);
print p, mean;
``````
Calcite | Level 5

## Re: Vector parameters behaving as scalars in RANDGEN for Binomial distribution

Thanks a million. It worked.

From The DO Loop
Want more? Visit our blog for more articles like these.
Discussion stats
• 2 replies
• 665 views
• 1 like
• 2 in conversation