Login  Register

Re: saving MATRIX output to SAV file

Posted by David Marso on Feb 22, 2015; 8:32am
URL: http://spssx-discussion.165.s1.nabble.com/saving-MATRIX-output-to-SAV-file-tp5728761p5728770.html

Refinement: UNTESTED.
****.
DATA LIST FREE/rYX1 rYX2 rYpdct rX1X2 rX1pdct rX2pdct SAMPLE_.
BEGIN DATA.
 .59      .41      .71     -.05      .67      .70     1.00
 .49      .35      .62     -.06      .79      .55     2.00
 .55      .38      .67     -.06      .78      .56     3.00
END DATA.
MATRIX.
GET data/FILE=*.
COMPUTE numelem=NCOL(data)-1.
COMPUTE numcol=0.
LOOP k=1 TO 100000.
+  COMPUTE numcol=numcol+k.
END LOOP IF (numcol EQ numelem).
LOOP i=1 TO NROW(data).
+  COMPUTE R=MAKE(numcol,numcol,0).
+  COMPUTE curitem=1.
+  LOOP j=1 TO numcol.
+    COMPUTE j1=j+1.
+    COMPUTE enditem=curitem + numcol - j1.
+    COMPUTE r(j,j1:numcol)=data(i,curitem:enditem).
+  END LOOP.
SAVE {I,DET(R=R+T(R) + IDENT(numcol))} /OUTFILE='DETS.SAV' /VARIABLES=SAMPLE_ DET.
END LOOP.
END MATRIX.
---------------------------------
David Marso wrote
This works.
I misled you with MDIAG. I should have used IDENT.
The : method if assignment is faster than element by element.
Note: also creating just the upper triangle then smashing it into its transpose and adding an Identity matrix
DATA LIST FREE/rYX1 rYX2 rYpdct rX1X2 rX1pdct rX2pdct SAMPLE_.
BEGIN DATA.
 .59      .41      .71     -.05      .67      .70     1.00
 .49      .35      .62     -.06      .79      .55     2.00
 .55      .38      .67     -.06      .78      .56     3.00
END DATA.
MATRIX.
GET data/FILE=*.
LOOP i=1 TO NROW(data).
COMPUTE R=MAKE(4,4,0).
COMPUTE R(1,2:4)=data(i,1:3).
COMPUTE R(2,3:4)=data(i,4:5).
COMPUTE R(4,3)=data(i,6).
COMPUTE R=R+T(R) + IDENT(4).
/*PRINT R.
SAVE {I,DET(R)} /OUTFILE='DETS.SAV' /VARIABLES=SAMPLE_ DET.
END LOOP.
END MATRIX.

David Marso wrote
You want data(I,1) for the first assignment and I in the others as well.

Beckstead, Jason wrote
David and others,
thanks for your suggestions. I tried adapting your code but I must be missing something with the LOOP in MATRIX procedure. I keep getting an undefined error. My file structure is wide, rather than tall so all 6 vars are on the same line for each sample, but I don't think that is the problem. I think it is with the LOOP because I can't even get the code to print 3 R mtxs. Here is the set up for the first 3 of 10,000 samples.

DATA LIST FREE/rYX1 rYX2 rYpdct rX1X2 rX1pdct rX2pdct SAMPLE_.
BEGIN DATA.
 .59      .41      .71     -.05      .67      .70     1.00
 .49      .35      .62     -.06      .79      .55     2.00
 .55      .38      .67     -.06      .78      .56     3.00
END DATA.
MATRIX.
GET data/FILE=*.
LOOP i=1 TO NROW(data).
COMPUTE R=MAKE(4,4,1).
COMPUTE R(2,1)=data(1).
COMPUTE R(3,1)=data(2).
COMPUTE R(4,1)=data(3).
COMPUTE R(3,2)=data(4).
COMPUTE R(4,2)=data(5).
COMPUTE R(4,3)=data(6).
COMPUTE R(1,2)=data(1).
COMPUTE R(1,3)=data(2).
COMPUTE R(1,4)=data(3).
COMPUTE R(2,3)=data(4).
COMPUTE R(2,4)=data(5).
COMPUTE R(3,4)=data(6).
PRINT R.
SAVE {I,DET(R)} /OUTFILE='DETS.SAV' /VARIABLES=SAMPLE_ DET.
END LOOP.
END MATRIX.

Any further insight would be appreciated.
Jason

_____________________________________________________________
 Jason W. Beckstead, Ph.D.
  Associate Professor/Quantitative Methodologist
  University of South Florida College of Nursing
  12901 Bruce B. Downs Blvd., MDC22, Tampa, FL 33612, USA
  Statistical Editor, International Journal of Nursing Studies
  phone: +1.813.974.7667  fax: +1.813.974.5418
  personal website:  http://personal.health.usf.edu/jbeckste/
  International Journal of Nursing Studies  http://www.elsevier.com/ijns


=====================
To manage your subscription to SPSSX-L, send a message to
[hidden email] (not to SPSSX-L), with no body text except the
command. To leave the list, send the command
SIGNOFF SPSSX-L
For a list of commands to manage subscriptions, send the command
INFO REFCARD
Please reply to the list and not to my personal email.
Those desiring my consulting or training services please feel free to email me.
---
"Nolite dare sanctum canibus neque mittatis margaritas vestras ante porcos ne forte conculcent eas pedibus suis."
Cum es damnatorum possederunt porcos iens ut salire off sanguinum cliff in abyssum?"