Date: Sat, 30 Jan 2010 22:34:01 -0500
Reply-To: Richard Ristow <wrristow@mindspring.com>
Sender: "SPSSX(r) Discussion" <SPSSX-L@LISTSERV.UGA.EDU>
From: Richard Ristow <wrristow@mindspring.com>
Subject: Re: DO REPEAT and shifting dataset names and dates
In-Reply-To: <812891.32787.qm@web110706.mail.gq1.yahoo.com>
Content-Type: text/html; charset="us-ascii"
<html>
<body>
At 05:26 AM 1/30/2010, Albert-Jan Roskam wrote:<br><br>
<blockquote type=cite class=cite cite="">Inside DO REPEAT, only xsave,
count, select, recode, do if, do repeat, compute, loop (and maybe a
couple of other commands) can be used.</blockquote><br>
You can use <tt><font size=2>RECODE</font></tt> inside
<tt><font size=2>DO REPEAT</font></tt>, but since it accepts variable
lists itself, you will rarely need to.<br><br>
You can't use XSAVE or DO REPEAT inside a DO REPEAT; see below. You can
nest LOOP inside DO REPEAT, and DO REPEAT inside LOOP.<br><br>
You can use declarative SPSS commands,<br>
<tt><font size=2>STRING, NUMERIC, FORMATS, MISSING VALUES,<br>
VAR LABELS, VAL LABELS<br>
</font></tt>inside a DO REPEAT, but using variable lists on the
declarative statements is usually preferable.<br><br>
==============================<br>
Illustrations using DO REPEAT<br>
==============================<br>
<font size=1>
|-----------------------------|---------------------------|<br>
|Output
Created
|30-JAN-2010 22:23:04 |<br>
|-----------------------------|---------------------------|<br>
[RolledUp] <br>
<br>
Alphabet Serial1 Serial2 Serial3 Letter1 Letter2 Letter3<br><br>
Roman
1
2 3
A
B C<br>
Greek
4
5 6 Gamma
Delta Epsilon<br><br>
Number of cases read: 2 Number of cases
listed: 2<br><br>
<br>
</font><font size=1>*
XSAVE
... .<br>
* ... XSAVE inside
LOOP ... .<br>
DATASET ACTIVATE RolledUp WINDOW=ASIS.<br>
DATASET COPY WithLoop WINDOW=FRONT.<br>
DATASET ACTIVATE WithLoop WINDOW=FRONT.<br>
VECTOR Nbr=Serial1 TO Serial3<br>
/Ltr=Letter1 TO Letter3.<br><br>
NUMERIC Order (F2).<br>
STRING Text (A7).<br><br>
LOOP #Idx = 1 TO 3.<br>
. COMPUTE Order = Nbr(#Idx).<br>
. COMPUTE Text = Ltr(#Idx).<br>
. XSAVE OUTFILE=File1<br>
/KEEP= Alphabet Order Text.<br>
END LOOP.<br>
EXECUTE /* --- One of the case where it's needed ---
*/.<br><br>
GET FILE=File1.<br>
LIST.<br><br>
</font><font size=1>List<br>
|-----------------------------|---------------------------|<br>
|Output
Created
|30-JAN-2010 22:23:11 |<br>
|-----------------------------|---------------------------|<br>
C:\Documents and Settings\Richard\My Documents<br>
\Temporary\SPSS\<br>
2010-01-30 Roskam - <br>
Re-DO REPEAT and shifting dataset names and dates. -
LOOP.SAV<br>
<br>
Alphabet Order Text<br><br>
Roman 1 A<br>
Roman 2 B<br>
Roman 3 C<br>
Greek 4 Gamma<br>
Greek 5 Delta<br>
Greek 6 Epsilon<br><br>
<br>
Number of cases read: 6 Number of cases
listed: 6<br><br>
<br>
</font><font size=1>* ... XSAVE inside DO
REPEAT ... .<br>
DATASET ACTIVATE RolledUp WINDOW=ASIS.<br>
DATASET COPY WithRpt WINDOW=FRONT.<br>
DATASET ACTIVATE WithRpt WINDOW=FRONT.<br>
NUMERIC Order (F2).<br>
STRING Text (A7).<br><br>
DO REPEAT<br>
Nbr=Serial1 TO Serial3<br>
/Ltr=Letter1 TO Letter3.<br>
. COMPUTE Order = Nbr.<br>
. COMPUTE Text = Ltr.<br>
. XSAVE OUTFILE=File2<br><br>
>Error # 4530. Command name: XSAVE<br>
>This command is not allowed inside the DO REPEAT/ END REPEAT
facility. The<br>
>command will be ignored.<br>
>This command not executed.<br><br>
/KEEP= Alphabet Order Text.<br>
END REPEAT.<br><br>
EXECUTE /* --- One of the cases where it's needed ---
*/.<br><br>
GET FILE=File2.<br><br>
>Error # 31. Command name: GET FILE<br>
>File not found.<br>
>This command not executed.<br><br>
<br><br>
* Nested DO
REPEAT
... .<br><br>
NEW FILE.<br>
INPUT PROGRAM.<br><br>
NUMERIC A B C D E (F2).<br>
RECODE A B C D E (ELSE=1).<br><br>
END CASE.<br>
END FILE.<br>
END INPUT PROGRAM.<br><br>
DO REPEAT FACTOR = 2 3 5.<br>
. DO REPEAT NUMBER = A TO E.<br><br>
>Error # 4530. Command name: DO REPEAT<br>
>This command is not allowed inside the DO REPEAT/ END REPEAT
facility. The<br>
>command will be ignored.<br>
>This command not executed.<br><br>
. COMPUTE NUMBER = NUMBER * FACTOR.<br>
. END REPEAT.<br>
END REPEAT.<br><br>
>Error # 4001. Command name: END REPEAT<br>
>An END REPEAT command has appeared without a previous DO REPEAT
command.<br>
>This command not executed.<br><br>
LIST.<br><br>
</font><font size=1>List<br>
|-----------------------------|---------------------------|<br>
|Output
Created
|30-JAN-2010 22:23:19 |<br>
|-----------------------------|---------------------------|<br>
A B C D E NUMBER<br><br>
1 1 1 1 1
.<br><br>
Number of cases read: 1 Number of cases
listed: 1<br><br>
<br>
</font><font size=1>* DO REPEAT within LOOP is documented to
work -- ... .<br>
* see Command Syntax Reference article on DO REPEAT ...
.<br><br>
<br>
* LOOP within DO
REPEAT
... .<br><br>
NEW FILE.<br>
INPUT PROGRAM.<br><br>
NUMERIC A B C D E (F2).<br>
RECODE A B C D E (ELSE=1).<br><br>
END CASE.<br>
END FILE.<br>
END INPUT PROGRAM.<br><br>
VECTOR NUMBER=A TO E.<br><br>
DO REPEAT FACTOR = 2 3 5.<br>
. LOOP #IDX = 1 TO 5.<br>
. COMPUTE NUMBER(#IDX) = NUMBER(#IDX) *
FACTOR.<br>
. END LOOP..<br>
END REPEAT.<br><br>
LIST.<br><br>
</font><font size=1>List<br>
|-----------------------------|---------------------------|<br>
|Output
Created
|30-JAN-2010 22:23:23 |<br>
|-----------------------------|---------------------------|<br>
A B C D E<br><br>
30 30 30 30 30<br><br>
Number of cases read: 1 Number of cases
listed: 1<br><br>
<br>
</font><font size=1>* Declarative statements within DO
REPEAT
... ,<br><br>
NEW FILE.<br>
INPUT PROGRAM.<br>
. NUMERIC RecdNum (F2).<br>
. COMPUTE RecdNum=1.<br>
. END CASE.<br>
END FILE.<br>
END INPUT PROGRAM.<br><br>
DO REPEAT NewVar = V1 TO V5.<br>
. NUMERIC NewVar (F2).<br>
END REPEAT.<br><br>
LIST.<br><br>
</font><font size=1>List<br>
|-----------------------------|---------------------------|<br>
|Output
Created
|30-JAN-2010 22:23:29 |<br>
|-----------------------------|---------------------------|<br>
RecdNum V1 V2 V3 V4 V5<br><br>
1 . . . .
.<br><br>
Number of cases read: 1 Number of cases
listed: 1<br>
</font>==============================<br>
APPENDIX: Test data, and code<br>
==============================<br>
<tt><font size=2>* C:\Documents and Settings\Richard\My
Documents
.<br>
* \Technical\spssx-l\Z
2010a
.<br>
* \2010-01-30 Roskam - Re-DO REPEAT and shifting
dataset names and dates.SPS .<br><br>
* In response to
posting
.<br>
* Date: Sat, 30 Jan 2010 02:26:43
-0800
.<br>
* From: Albert-Jan Roskam
<fomcl@yahoo.com>
.<br>
* Subject: Re: DO REPEAT and shifting dataset names and
dates .<br>
* Comments: To: AlanKrinsky
<Alan.Krinsky@UMASSMEMORIAL.ORG>
.<br>
* To:
SPSSX-L@LISTSERV.UGA.EDU
.<br><br>
FILE HANDLE File1<br>
/NAME='C:\Documents and Settings\Richard\My
Documents'
+<br>
'\Temporary\SPSS\'
+<br>
'2010-01-30 Roskam -
'
+ <br>
'Re-DO REPEAT and shifting dataset
names and dates.'
+<br>
' -
'
+<br>
'LOOP.SAV'.
<br><br>
FILE HANDLE File2<br>
/NAME='C:\Documents and Settings\Richard\My
Documents'
+<br>
'\Temporary\SPSS\'
+<br>
'2010-01-30 Roskam -
'
+ <br>
'Re-DO REPEAT and shifting dataset
names and dates.'
+<br>
' -
'
+<br>
'DO
REPEAT.SAV'.
<br><br>
NEW FILE.<br>
DATA LIST LIST/<br>
Alphabet Serial1 Serial2 Serial3 Letter1 Letter2
Letter3<br>
(A5, F2,
F2, F2,
A7, A7, A7).<br>
BEGIN DATA<br>
Roman
1
2
3
A
B C<br>
Greek
4
5
6 Gamma Delta
Epsilon<br>
END DATA.<br>
DATASET NAME RolledUp.<br>
LIST.<br><br>
*
XSAVE
... .<br>
* ... XSAVE inside
LOOP ... .<br>
DATASET ACTIVATE RolledUp WINDOW=ASIS.<br>
DATASET COPY WithLoop WINDOW=FRONT.<br>
DATASET ACTIVATE WithLoop WINDOW=FRONT.<br><br>
VECTOR Nbr=Serial1 TO Serial3<br>
/Ltr=Letter1 TO Letter3.<br><br>
NUMERIC Order (F2).<br>
STRING Text (A7).<br><br>
LOOP #Idx = 1 TO 3.<br>
. COMPUTE Order = Nbr(#Idx).<br>
. COMPUTE Text = Ltr(#Idx).<br>
. XSAVE OUTFILE=File1<br>
/KEEP= Alphabet Order Text.<br>
END LOOP.<br>
EXECUTE /* --- One of the case where it's needed ---
*/.<br><br>
GET FILE=File1.<br>
LIST.<br><br>
* ... XSAVE inside DO REPEAT ... .<br>
DATASET ACTIVATE RolledUp WINDOW=ASIS.<br>
DATASET COPY WithRpt WINDOW=FRONT.<br>
DATASET ACTIVATE WithRpt WINDOW=FRONT.<br><br>
NUMERIC Order (F2).<br>
STRING Text (A7).<br><br>
DO REPEAT<br>
Nbr=Serial1 TO Serial3<br>
/Ltr=Letter1 TO Letter3.<br>
. COMPUTE Order = Nbr.<br>
. COMPUTE Text = Ltr.<br>
. XSAVE OUTFILE=File2<br>
/KEEP= Alphabet Order Text.<br>
END REPEAT.<br><br>
EXECUTE /* --- One of the cases where it's needed ---
*/.<br><br>
GET FILE=File2.<br>
LIST.<br><br>
* Nested DO
REPEAT
... .<br><br>
NEW FILE.<br>
INPUT PROGRAM.<br><br>
NUMERIC A B C D E (F2).<br>
RECODE A B C D E (ELSE=1).<br><br>
END CASE.<br>
END FILE.<br>
END INPUT PROGRAM.<br><br>
DO REPEAT FACTOR = 2 3 5.<br>
. DO REPEAT NUMBER = A TO E.<br>
. COMPUTE NUMBER = NUMBER * FACTOR.<br>
. END REPEAT.<br>
END REPEAT.<br><br>
LIST.<br><br>
* DO REPEAT within LOOP is documented to work
-- ... .<br>
* see Command Syntax Reference article on DO REPEAT ...
.<br><br>
<br>
* LOOP within DO
REPEAT
... .<br><br>
NEW FILE.<br>
INPUT PROGRAM.<br><br>
NUMERIC A B C D E (F2).<br>
RECODE A B C D E (ELSE=1).<br><br>
END CASE.<br>
END FILE.<br>
END INPUT PROGRAM.<br><br>
VECTOR NUMBER=A TO E.<br><br>
DO REPEAT FACTOR = 2 3 5.<br>
. LOOP #IDX = 1 TO 5.<br>
. COMPUTE NUMBER(#IDX) = NUMBER(#IDX) *
FACTOR.<br>
. END LOOP..<br>
END REPEAT.<br><br>
LIST.<br><br>
* Declarative statements within DO
REPEAT
... ,<br><br>
NEW FILE.<br>
INPUT PROGRAM.<br>
. NUMERIC RecdNum (F2).<br>
. COMPUTE RecdNum=1.<br>
. END CASE.<br>
END FILE.<br>
END INPUT PROGRAM.<br><br>
DO REPEAT NewVar = V1 TO V5.<br>
. NUMERIC NewVar (F2).<br>
END REPEAT.<br><br>
LIST.</font> </body>
<br>
</html>
=====================
To manage your subscription to SPSSX-L, send a message to
LISTSERV@LISTSERV.UGA.EDU (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
|