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
- /
- Polychoric correlations and factor analysis...I'm ...

Topic Options

- 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
- RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

01-22-2014 01:22 PM

Hello!

I'm having a terribly hard time trying to import a matrix of polychoric correlations for use in a factor analysis. I'm really not sure what I'm doing wrong, because I'm following the steps I've seen on various websites. The farthest I get is creating a temp file that only has the names of the variables along the top, but none of the cells are filled in. Here's the syntax I've been using. Perhaps someone can tell me where I'm going wrong.

Step 1: creating the matrix:

**corr** data= Work.temp00 polychoric out= WORK.temp01**; var **1_1 q1_2 q1_3 q1_4 q1_5 q1_6 q1_7 q1_8 q1_9 q1_10 q1_11 q1_13 etc.; run;

I then export this temp file into a csv file (I won't include the syntax because it everything works up to this point.

Step 2: trying to imput the correlation matrix

Data= temp02 (type=corr);

infile 'poly.csv';

input _name_ $ q1_1 q1_2 q1_3 q1_4 q1_5 q1_6 q1_7 q1_8 q1_9 q1_10 q1_11 q1_13 etc.; run;

The result is a temp file with a header row with "type" and "name" in the first two columns followed by, as I said, the variable names in the header row, but nothing in the cells? Nevertheless, the next step I'm trying to do is this:

**Step 3: factor analysis**

Proc factor data=temp02; method=prinit n=2 [note that I'm also not sure what the "n=2" is all about. should this be the actual number of observations?)rotate=promax scree; run;

Any advice would be most welcome! Thank you!

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

Posted in reply to PhilG

01-22-2014 01:33 PM

Why export out to a file and then bring it back in?

Skip step2 entirely and then go to step 3 and use the temp01 as your data input.

Also, work through an example for proc factor before trying this so you understand the options.

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

Posted in reply to Reeza

01-22-2014 01:44 PM

Thank you for the reply. Unfortunately, I've tried that several times and I get this message:

NOTE: N not equal across variables in data set WORK.TEMP01. This may not be appropriate. The smallest value will be used.

ERROR: CORR matrix incomplete in data set WORK.TEMP01.

NOTE: The SAS System stopped processing this step because of errors.

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

Posted in reply to PhilG

01-22-2014 01:59 PM

The correlation output from proc corr gives some extra statistics, such as N, Mean etc.

Filter those out first to get a true correlation matrix.

Then input to proc factor, add in a TYPE variable with a value called CORR to specify a correlation input.

You also have your semicolons in the wrong place. Anyways, hopefully this gets you on to working with the proc factor procedure instead of dealing with input data.

See the following to determine what settings you want:

http://www.math.wpi.edu/saspdf/stat/chap26.pdf

proc corr data=sashelp.iris out=corrMatrix;

var petalwidth petallength sepalwidth sepallength;

run;

proc print data=corrMatrix;

run;

data corrMatrix2;

set corrMatrix;

where _Type_='CORR';

TYPE="CORR";

drop _type_ _name_;

run;

ods graphics on;

proc factor data=corrMatrix2

rotate=promax

outstat=fact_all

plots=scree;

run;

ods graphics off;

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

Posted in reply to PhilG

06-19-2017 10:32 AM

I recognize this error. You need to look closer of your correlation matrix. Some pairs of your variables may not have their correlation calculated and you got a empty cells in the matrix which SAS says it is incomplete matrix.

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

Posted in reply to PhilG

07-01-2015 12:37 PM

Use proc corr to create the correlation matrix and export it directly to another SAS dataset and then use that dataset as your ut for proc calis:

Here is the example:

ods listing close;

proc corr data=survey **OUTPLC=surveyplc** ;

var V1-V12;

run;

ods listing;

proc calis data=**surveyplc**

;

lineqs

....;

std

.....;

cov

.....

var;

V1-V12;

run;