Wrapping statements in Python in SPSS

A

alankrinsky

I am working with Python looping in SPSS. What are the limits for the

for var1, var2, var3 in zip(Variable1, Variable2, Variable3):

statement in the Python looping function within SPSS? I am getting an errormessage, I presume because of wrapping or length. Imagine the above statement, but expanded, as I am working with more than 28 variables in this loop, and even making the names really short is making the statement too long. Is it impossible to wrap and make this work? I know there are ways to wrap strings, including lists of variables, but here I have a statement/function..

Thank you for any help!

Alan
 
C

Chris Angelico

I am working with Python looping in SPSS. What are the limits for the

for var1, var2, var3 in zip(Variable1, Variable2, Variable3):

statement in the Python looping function within SPSS? I am getting an error message, I presume because of wrapping or length. Imagine the above statement, but expanded, as I am working with more than 28 variables in this loop, and even making the names really short is making the statement too long.. Is it impossible to wrap and make this work? I know there are ways to wrap strings, including lists of variables, but here I have a statement/function.

At what point are you wrapping it? Can you show the wrapped form and
the error message?

As a general rule, you can safely wrap anything that's inside parentheses.

for (
var1,
var2,
var3
) in zip(
Variable1,
Variable2,
Variable3
):
pass

That may be a tad excessive, but you get the idea :)

ChrisA
 
A

alankrinsky

Chris,

I tried placing in the format you suggested and received this error message:

END PROGRAM.
Traceback (most recent call last):
File "<string>", line 396, in <module>
ValueError: incomplete format key



____________________
 
A

alankrinsky

Chris,

I tried placing in the format you suggested and received this error message:

END PROGRAM.
Traceback (most recent call last):
File "<string>", line 396, in <module>
ValueError: incomplete format key



____________________
 
P

Peter Otten

I tried placing in the format you suggested and received this error
message:

END PROGRAM.
Traceback (most recent call last):
File "<string>", line 396, in <module>
ValueError: incomplete format key

You seem to have a malformed format string. Example:

Correct:
'Wonderful Spam'

Broken (not the missing ')'):
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: incomplete format key
 
C

Chris Angelico

Chris,

I tried placing in the format you suggested and received this error message:

END PROGRAM.
Traceback (most recent call last):
File "<string>", line 396, in <module>
ValueError: incomplete format key

I don't think the code I gave could produce that. You'll need to show
a bit more of your code, including at least line 396, possibly some
context. Unless one of the other members here has a working crystal
ball - mine's cooling down after excessive use.

ChrisA
 
A

alankrinsky

I think 396 just comes from the end of the Python loop, without indicating which line in the loop is at issue.

Here is the full code from this section of the loop:


for (
msr, brk, dmn, src, dspd1, dspd2, dspd3, dspd4, dspd5, dspd6, dspd7, dspd8, dspd9, dspd10, dspd11, dspd12,
period1, period2, period3, period4, period5, period6, period7, period8,period9, period10, period11, period12
) in zip(
Measure, BreakVariable, Dimension, Sources, DimensionSourceTimeFrame1, DimensionSourceTimeFrame2, DimensionSourceTimeFrame3, DimensionSourceTimeFrame4,
DimensionSourceTimeFrame5, DimensionSourceTimeFrame6, DimensionSourceTimeFrame7, DimensionSourceTimeFrame8, DimensionSourceTimeFrame9,
DimensionSourceTimeFrame10, DimensionSourceTimeFrame11, DimensionSourceTimeFrame12,
TimeFrame1, TimeFrame2, TimeFrame3, TimeFrame4, TimeFrame5, TimeFrame6,TimeFrame7, TimeFrame8, TimeFrame9, TimeFrame10, TimeFrame11, TimeFrame12
):


spss.Submit(r"""


Alan
 
A

alankrinsky

I think 396 just comes from the end of the Python loop, without indicating which line in the loop is at issue.

Here is the full code from this section of the loop:


for (
msr, brk, dmn, src, dspd1, dspd2, dspd3, dspd4, dspd5, dspd6, dspd7, dspd8, dspd9, dspd10, dspd11, dspd12,
period1, period2, period3, period4, period5, period6, period7, period8,period9, period10, period11, period12
) in zip(
Measure, BreakVariable, Dimension, Sources, DimensionSourceTimeFrame1, DimensionSourceTimeFrame2, DimensionSourceTimeFrame3, DimensionSourceTimeFrame4,
DimensionSourceTimeFrame5, DimensionSourceTimeFrame6, DimensionSourceTimeFrame7, DimensionSourceTimeFrame8, DimensionSourceTimeFrame9,
DimensionSourceTimeFrame10, DimensionSourceTimeFrame11, DimensionSourceTimeFrame12,
TimeFrame1, TimeFrame2, TimeFrame3, TimeFrame4, TimeFrame5, TimeFrame6,TimeFrame7, TimeFrame8, TimeFrame9, TimeFrame10, TimeFrame11, TimeFrame12
):


spss.Submit(r"""


Alan
 
M

Mitya Sirenef

I think 396 just comes from the end of the Python loop, without indicating which line in the loop is at issue.

Here is the full code from this section of the loop:


for (
msr, brk, dmn, src, dspd1, dspd2, dspd3, dspd4, dspd5, dspd6, dspd7,
dspd8, dspd9, dspd10, dspd11, dspd12,
period1, period2, period3, period4, period5, period6, period7,
period8, period9, period10, period11, period12
) in zip(
Measure, BreakVariable, Dimension, Sources,
DimensionSourceTimeFrame1, DimensionSourceTimeFrame2,
DimensionSourceTimeFrame3, DimensionSourceTimeFrame4,
DimensionSourceTimeFrame5, DimensionSourceTimeFrame6,
DimensionSourceTimeFrame7, DimensionSourceTimeFrame8,
DimensionSourceTimeFrame9,
DimensionSourceTimeFrame10, DimensionSourceTimeFrame11, DimensionSourceTimeFrame12,
TimeFrame1, TimeFrame2, TimeFrame3, TimeFrame4, TimeFrame5,
TimeFrame6, TimeFrame7, TimeFrame8, TimeFrame9, TimeFrame10,
TimeFrame11, TimeFrame12
):


spss.Submit(r"""


Alan

By the way, when lines run so long they can get hard to manage, edit,
understand, et cetera. You should consider setting things up cleanly
before doing the loop and using a list of names for columns like so:


def main():
l1, l2 = [1,2], [3,4]
zipped = zip(l1, l2)
colnames = "first second".split()

for columns in zipped:
coldict = dict(zip(colnames, columns))
print("coldict", coldict)

main()


This produces output:

coldict {'second': 3, 'first': 1}
coldict {'second': 4, 'first': 2}

... and then you can pass the coldict on to your string.

- mitya
 
M

Mitya Sirenef

I think 396 just comes from the end of the Python loop, without
indicating which line in the loop is at issue.

Here is the full code from this section of the loop:


for (
msr, brk, dmn, src, dspd1, dspd2, dspd3, dspd4, dspd5, dspd6, dspd7,
dspd8, dspd9, dspd10, dspd11, dspd12,
period1, period2, period3, period4, period5, period6, period7,
period8, period9, period10, period11, period12
) in zip(
Measure, BreakVariable, Dimension, Sources,
DimensionSourceTimeFrame1, DimensionSourceTimeFrame2,
DimensionSourceTimeFrame3, DimensionSourceTimeFrame4,
DimensionSourceTimeFrame5, DimensionSourceTimeFrame6,
DimensionSourceTimeFrame7, DimensionSourceTimeFrame8,
DimensionSourceTimeFrame9,
DimensionSourceTimeFrame10, DimensionSourceTimeFrame11, DimensionSourceTimeFrame12,
TimeFrame1, TimeFrame2, TimeFrame3, TimeFrame4, TimeFrame5,
TimeFrame6, TimeFrame7, TimeFrame8, TimeFrame9, TimeFrame10,
TimeFrame11, TimeFrame12
):


spss.Submit(r"""


Alan

By the way, when lines run so long they can get hard to manage, edit,
understand, et cetera. You should consider setting things up cleanly
before doing the loop and using a list of names for columns like so:


def main():
l1, l2 = [1,2], [3,4]
zipped = zip(l1, l2)
colnames = "first second".split()

for columns in zipped:
coldict = dict(zip(colnames, columns))
print("coldict", coldict)


Should really be 'for column in zipped:' !

-m
 
M

Mitya Sirenef

DimensionSourceTimeFrame1, DimensionSourceTimeFrame2,
DimensionSourceTimeFrame3, DimensionSourceTimeFrame4,DimensionSourceTimeFrame7, DimensionSourceTimeFrame8,
DimensionSourceTimeFrame9,TimeFrame6, TimeFrame7, TimeFrame8, TimeFrame9, TimeFrame10,
TimeFrame11, TimeFrame12
):


spss.Submit(r"""


Alan

By the way, when lines run so long they can get hard to manage, edit,
understand, et cetera. You should consider setting things up cleanly
before doing the loop and using a list of names for columns like so:


def main():
l1, l2 = [1,2], [3,4]
zipped = zip(l1, l2)
colnames = "first second".split()

for columns in zipped:
coldict = dict(zip(colnames, columns))
print("coldict", coldict)


Should really be 'for column in zipped:' !

-m

Doh - the code is good, but I got a little confused with variable names.
This should be more like it:

def main():
c1, c2 = [1,2], [3,4]
zipped = zip(c1, c2)
colnames = "first second".split()

for values in zipped:
valdict = dict(zip(colnames, values))
print("valdict", valdict)

main()


-m
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,766
Messages
2,569,569
Members
45,042
Latest member
icassiem

Latest Threads

Top