Date: Fri, 2 Jul 2010 07:14:38 -0600
Reply-To: Jon K Peck <peck@us.ibm.com>
Sender: "SPSSX(r) Discussion" <SPSSX-L@LISTSERV.UGA.EDU>
From: Jon K Peck <peck@us.ibm.com>
Subject: Re: Help with 'pattern' in Python syntax
In-Reply-To: <SNT110-W420EE073E1E3AFC0EC279FACE0@phx.gbl>
Content-Type: multipart/alternative;
Jon Peck
SPSS, an IBM Company
peck@us.ibm.com
312-651-3435
From:
Ruben van den Berg <ruben_van_den_berg@hotmail.com>
To:
SPSSX-L@LISTSERV.UGA.EDU
Date:
07/02/2010 02:44 AM
Subject:
[SPSSX-L] Help with 'pattern' in Python syntax
Sent by:
"SPSSX(r) Discussion" <SPSSX-L@LISTSERV.UGA.EDU>
Dear all,
I've a data file with groups of variables. They look like
n1_1 n1_2 n1_3
n2_1 n2_2
n3_1 n3_2 n3_3 n3_4
and so on. I want to build syntax based on the first subscript of n. The
range of the second subscript differs between groups (so n1 may run up to
n1_5 while n2 may run up to n2_7). So I try to make variable lists like
n1_1 to n1_i
n2_1 to n2_j
and so on. I've 7 groups and I tried to loop (1 through 7) and put the
loop variable into a pattern statement but I don't master enough Python to
get it done. My attempt, so far, is
begin program.
import spss,spssaux
for i in range(7):
for j in range(spss.GetVariableCount()):
varlist=spssaux.VariableDict(pattern = "n"+str[i+1]+"_\d+")
print varlist
end program.
And the result is
Traceback (most recent call last):
File "<string>", line 5, in <module>
TypeError: 'type' object is unsubscriptable
>>>The immediate problem is that str is a function, but this code is
subscripting it - square brackets vs parentheses.
But the larger problem is that you are creating a variable dictionary for
each input variable and each pattern. BTW, when you print it, you will
just get a variable dictionary object printed. To see what variables you
are creating, change the print statement to
print varlist.variables
You will see that the code creates each variable list seven times.
Try something like this,
begin program.
import spss,spssaux
vardict = spssaux.VariableDict()
for i in range(3): #number of groups
varlist = vardict.range(pattern="n" + str(i+1) + r"_\d+")
print varlist
end program.
First a variable dictionary is created. (You could make it a subset of
the variables starting with n by using pattern="n" in the VariableDict
call.)
Then the range method of the variableDict object is called to select a
subset of the variables in the vardict dictionary. Note that I used r in
front of the last part of the pattern string. It isn't necessary here,
but it prevents Python from treating \x sequences as escape sequences and
ensures that \d is left to be interpreted as regular expression notation.
HTH,
Jon Peck
Could anyone please propose a Python statement that will do the job?
TIA,
Ruben van den Berg
Consultant Models & Methods
TNS NIPO
Email: ruben.van.den.berg@tns-nipo.com
Mobiel: +31 6 24641435
Telefoon: +31 20 522 5738
Internet: www.tns-nipo.com
Express yourself instantly with MSN Messenger! MSN Messenger
[text/html]