Unclosed loop

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Unclosed loop

shorne
Using the following code in SPSS 11 and get the following error:

>Error # 4095.  Command name: EXECUTE
>The transformations program contains an unclosed LOOP, DO IF, or complex
>file structure.  Use the level-of-control shown to the left of the SPSS
>commands to determine the range of LOOPs and DO IFs.
>This command not executed.

Am I missing something at the bottom?

Do if reldate >= date.mdy(4,1,1999) and reldate <= date.mdy(3,31,2000).
comp  fy=1.
ELSE if reldate >= date.mdy(4,1,2000) and reldate <= date.mdy(3,31,2001).
comp  fy=2.
ELSE if reldate >= date.mdy(4,1,2001) and reldate <= date.mdy(3,31,2002).
comp  fy=3.
ELSE if reldate >= date.mdy(4,1,2002) and reldate <= date.mdy(3,31,2003).
comp  fy=4.
ELSE if reldate >= date.mdy(4,1,2003) and reldate <= date.mdy(3,31,2004).
comp  fy=5.
ELSE if reldate >= date.mdy(4,1,2004) and reldate <= date.mdy(3,31,2005).
comp  fy=6.
ELSE if reldate >= date.mdy(4,1,2005) and reldate <= date.mdy(3,31,2006).
comp  fy=7.
ELSE if reldate >= date.mdy(4,1,2006) and reldate <= date.mdy(3,31,2007).
comp  fy=8.
END IF.
EXECUTE.
Reply | Threaded
Open this post in threaded view
|

Re: Unclosed loop

Bruce Weaver
Administrator
I don't see anything wrong.  But DO-IF with that many ELSE lines is always a bit hard to read.  I think something like the following (untested) might work.  If it does, it's a lot easier to read.

do repeat i = 1 to 8 / y1 = 1999 to 2006 / y2 = 2000 to 2007.
- if RANGE(reldate,date.mdy(4,1,y1),date.mdy(3,31,y2)) fy = i.
end repeat.
execute.

HTH.


shorne wrote
Using the following code in SPSS 11 and get the following error:

>Error # 4095.  Command name: EXECUTE
>The transformations program contains an unclosed LOOP, DO IF, or complex
>file structure.  Use the level-of-control shown to the left of the SPSS
>commands to determine the range of LOOPs and DO IFs.
>This command not executed.

Am I missing something at the bottom?

Do if reldate >= date.mdy(4,1,1999) and reldate <= date.mdy(3,31,2000).
comp  fy=1.
ELSE if reldate >= date.mdy(4,1,2000) and reldate <= date.mdy(3,31,2001).
comp  fy=2.
ELSE if reldate >= date.mdy(4,1,2001) and reldate <= date.mdy(3,31,2002).
comp  fy=3.
ELSE if reldate >= date.mdy(4,1,2002) and reldate <= date.mdy(3,31,2003).
comp  fy=4.
ELSE if reldate >= date.mdy(4,1,2003) and reldate <= date.mdy(3,31,2004).
comp  fy=5.
ELSE if reldate >= date.mdy(4,1,2004) and reldate <= date.mdy(3,31,2005).
comp  fy=6.
ELSE if reldate >= date.mdy(4,1,2005) and reldate <= date.mdy(3,31,2006).
comp  fy=7.
ELSE if reldate >= date.mdy(4,1,2006) and reldate <= date.mdy(3,31,2007).
comp  fy=8.
END IF.
EXECUTE.
--
Bruce Weaver
bweaver@lakeheadu.ca
http://sites.google.com/a/lakeheadu.ca/bweaver/

"When all else fails, RTFM."

PLEASE NOTE THE FOLLOWING: 
1. My Hotmail account is not monitored regularly. To send me an e-mail, please use the address shown above.
2. The SPSSX Discussion forum on Nabble is no longer linked to the SPSSX-L listserv administered by UGA (https://listserv.uga.edu/).
Reply | Threaded
Open this post in threaded view
|

Re: Unclosed loop

Bruce Weaver
Administrator
I received this from the OP via  e-mail:

Thanks,
But still getting the unclosed loop error.  I need to get to our SPSS guru once he’s back from vacation.


It works for me--see below.  This makes me wonder if your unclosed loop is being caused by something earlier in the syntax file.


data list free / reldate (date11).
begin data
15-Jan-1999 31-Mar-1999 1-Apr-1999
15-Jan-2000 31-Mar-2000 1-Apr-2000
15-Jan-2001 31-Mar-2001 1-Apr-2001
15-Jan-2002 31-Mar-2002 1-Apr-2002
15-Jan-2003 31-Mar-2003 1-Apr-2003
15-Jan-2004 31-Mar-2004 1-Apr-2004
15-Jan-2005 31-Mar-2005 1-Apr-2005
15-Jan-2006 31-Mar-2006 1-Apr-2006
15-Jan-2007 31-Mar-2007 1-Apr-2007
end data.

do repeat i = 1 to 8 / y1 = 1999 to 2006 / y2 = 2000 to 2007.
- if RANGE(reldate,date.mdy(4,1,y1),date.mdy(3,31,y2)) fy = i.
end repeat.
execute.
list.

Output:

    reldate fy

15-JAN-1999  .
31-MAR-1999  .
01-APR-1999  1
15-JAN-2000  1
31-MAR-2000  1
01-APR-2000  2
15-JAN-2001  2
31-MAR-2001  2
01-APR-2001  3
15-JAN-2002  3
31-MAR-2002  3
01-APR-2002  4
15-JAN-2003  4
31-MAR-2003  4
01-APR-2003  5
15-JAN-2004  5
31-MAR-2004  5
01-APR-2004  6
15-JAN-2005  6
31-MAR-2005  6
01-APR-2005  7
15-JAN-2006  7
31-MAR-2006  7
01-APR-2006  8
15-JAN-2007  8
31-MAR-2007  8
01-APR-2007  .

Number of cases read:  27    Number of cases listed:  27



Bruce Weaver wrote
I don't see anything wrong.  But DO-IF with that many ELSE lines is always a bit hard to read.  I think something like the following (untested) might work.  If it does, it's a lot easier to read.

do repeat i = 1 to 8 / y1 = 1999 to 2006 / y2 = 2000 to 2007.
- if RANGE(reldate,date.mdy(4,1,y1),date.mdy(3,31,y2)) fy = i.
end repeat.
execute.

HTH.


shorne wrote
Using the following code in SPSS 11 and get the following error:

>Error # 4095.  Command name: EXECUTE
>The transformations program contains an unclosed LOOP, DO IF, or complex
>file structure.  Use the level-of-control shown to the left of the SPSS
>commands to determine the range of LOOPs and DO IFs.
>This command not executed.

Am I missing something at the bottom?

Do if reldate >= date.mdy(4,1,1999) and reldate <= date.mdy(3,31,2000).
comp  fy=1.
ELSE if reldate >= date.mdy(4,1,2000) and reldate <= date.mdy(3,31,2001).
comp  fy=2.
ELSE if reldate >= date.mdy(4,1,2001) and reldate <= date.mdy(3,31,2002).
comp  fy=3.
ELSE if reldate >= date.mdy(4,1,2002) and reldate <= date.mdy(3,31,2003).
comp  fy=4.
ELSE if reldate >= date.mdy(4,1,2003) and reldate <= date.mdy(3,31,2004).
comp  fy=5.
ELSE if reldate >= date.mdy(4,1,2004) and reldate <= date.mdy(3,31,2005).
comp  fy=6.
ELSE if reldate >= date.mdy(4,1,2005) and reldate <= date.mdy(3,31,2006).
comp  fy=7.
ELSE if reldate >= date.mdy(4,1,2006) and reldate <= date.mdy(3,31,2007).
comp  fy=8.
END IF.
EXECUTE.
--
Bruce Weaver
bweaver@lakeheadu.ca
http://sites.google.com/a/lakeheadu.ca/bweaver/

"When all else fails, RTFM."

PLEASE NOTE THE FOLLOWING: 
1. My Hotmail account is not monitored regularly. To send me an e-mail, please use the address shown above.
2. The SPSSX Discussion forum on Nabble is no longer linked to the SPSSX-L listserv administered by UGA (https://listserv.uga.edu/).