turn on suggestions

Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

Find a Community

- Home
- /
- SAS Programming
- /
- General Programming
- /
- generate ordinal data with known correlation matri...

Topic Options

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content

01-02-2014 05:37 AM

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...

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content

Posted in reply to asayin

01-06-2014 10:05 AM

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.