New Contributor
Posts: 2

# generate ordinal data with known correlation matrix

I want to generating data with a known correlation structure. I use proc iml and this codes.

proc iml;

n = 5;

r = {1 .07 .25 .6, .07 1 .07 .25, .25 .07 1 .07, .6 .25 .07 1};

print r;

c = root(r);

print c;

z=j(n,4,.);

do i = 1 to n;

do j = 1 to 4;

z[i,j]=rannor(-99);

end;

end;

print z;

d = z*c;

print d;

x1 = d[,1];  x2=d[,2]; x3=d[,3]; x4=d[,4];

print x1 x2 x3 x4;

create mvn var{x1 x2 x3 x4};

append;

quit;

proc print data = mvn;

run;

It is okey but I want to iteration. I've tried many codes, but so far I did not succeed. How can I make 20 replicate?

And also I want to generate ordinal data. How I can do it?

SAS Super FREQ
Posts: 4,240

## Re: generate ordinal data with known correlation matrix

It looks like your code is for the multivariate normal case. You can simplify your life by using the built-in RANDNORMAL function.

For your other two questions, you might want to look at my book Simulating Data with SAS.

Chapter 8 deals with simulating MV data from standard distributions. For the MVN case, you can generate 20 replicates like this:

NumSamples = 20;

Mean = j(1,4,0);

x = RandNormal( NumSamples*N, Mean, R);

ID = colvec(repeat( T(1:NumSamples), 1, N));

Y = ID || x;

varNames = "x1":"x4";

create MVN from Y[c=("ID"||varNames)];

append from Y;

close MVN;

The case of ordinal variables is described in Chapter 9.

Discussion stats