Posted by
Beckstead, Jason on
Feb 22, 2015; 6:33pm
URL: http://spssx-discussion.165.s1.nabble.com/saving-MATRIX-output-to-SAV-file-tp5728761p5728776.html
David,
Thanks for suggestions. I figured the problem was with the LOOP structure for writing/saving out results, which I fixed. I appreciate your elegant mods to the input structure (a little matrix algebra goes a long way). Here is my final code that did the trick.
*THIS WORKS -------------------------------------------------.
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 D=MAKE(NROW(data),2,0).
LOOP i=1 TO NROW(data).
COMPUTE R=MAKE(4,4,1).
COMPUTE R(2,1)=data(i,1).
COMPUTE R(3,1)=data(i,2).
COMPUTE R(4,1)=data(i,3).
COMPUTE R(3,2)=data(i,4).
COMPUTE R(4,2)=data(i,5).
COMPUTE R(4,3)=data(i,6).
COMPUTE R(1,2)=data(i,1).
COMPUTE R(1,3)=data(i,2).
COMPUTE R(1,4)=data(i,3).
COMPUTE R(2,3)=data(i,4).
COMPUTE R(2,4)=data(i,5).
COMPUTE R(3,4)=data(i,6).
COMPUTE D(i,1:2)={i,DET(R)}.
END LOOP.
SAVE D /OUTFILE='C:\DETS.SAV' /VARIABLES=SAMPLE_ DET.
END MATRIX.
_____________________________________________________________
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________________________________________
From: SPSSX(r) Discussion [
[hidden email]] on behalf of David Marso [
[hidden email]]
Sent: Sunday, February 22, 2015 3:32 AM
To:
[hidden email]
Subject: Re: saving MATRIX output to SAV file
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
>>> LISTSERV@.UGA
>>> (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?"
--
View this message in context:
http://spssx-discussion.1045642.n5.nabble.com/saving-MATRIX-output-to-SAV-file-tp5728761p5728770.htmlSent from the SPSSX Discussion mailing list archive at Nabble.com.
=====================
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
=====================
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