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?
Thanks for your help...
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.
Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.
Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.