Python SPSS 语法中的循环错误仅当我 运行 两次相同的代码时
Python loop error in SPSS syntax only if i run the same code twice
我是 python 编程新手。
我正在尝试使用循环和一些 python 代码在 SPSS 中使用 python(我有点管理它......)自动化一些表格,但它只工作正常第一次我 运行 语法,第二次它只列出一次:
我有一个 SPSS 文件,其中合并了不同的项目(即不同的国家/地区),所以首先我尝试使用内置函数提取项目列表。
一旦我有了我的项目列表,我就 运行 一个循环,然后我更改了案例选择和制表的 spss 语法。
这是代码:
begin program.
import spss
#Function that extracts the data from spss
def DatiDaSPSS(vars, num):
if num == 0:
num = spss.GetCaseCount()
if vars == None:
varNums = range(spss.GetVariableCount())
else:
allvars = [spss.GetVariableName(i) for i in range(spss.GetVariableCount())]
varNums = [allvars.index(i) for i in vars]
data = spss.Cursor(varNums)
pydata = data.fetchmany(num)
data.close()
return pydata
#store the result of the function into a list:
all_prj=DatiDaSPSS(vars=["Project"],num=0)
#remove duplicates and keep only the country that i need:
prj_list=list(set([i[0] for i in all_prj]))
#loop for the tabulation:
for i in range(len(prj_list)):
prj_now=str(prj_list[i])
spss.Submit("""
compute filter_$=Project='%s'.
filter by filter_$.
exe.
TEXT "Country"
/OUTLINE HEADING="%s" TITLE="Country".
CTABLES
/VLABELS VARIABLES=HisInterviewer HisResult DISPLAY=DEFAULT
/TABLE HisInterviewer [C][COUNT F40.0, ROWPCT.COUNT PCT40.1] BY HisResult [C]
/CATEGORIES VARIABLES=HisInterviewer HisResult ORDER=A KEY=VALUE EMPTY=EXCLUDE TOTAL=YES
POSITION=AFTER
/CRITERIA CILEVEL=95.
""" %(prj_now,prj_now))
end program.
当我 运行 它第二次显示时,它只显示列表的最后一个值(并且只有一个列表)。如果我重新启动 SPSS,它第一次工作正常。
是功能的原因吗?
我正在使用 spss25
我可以自己回复吗,我应该编辑讨论还是删除讨论?我想我找到了原因,我猜这个函数只获取已经选择的值,我现在尝试在开始之前添加这个 SPSS 代码,它似乎工作正常:
use all.
exe.
begin program.
...
在最后一个循环中有一个数据过滤器,我在 运行 脚本之前将其删除。如果您希望我编辑或删除消息,请告诉我
我是 python 编程新手。
我正在尝试使用循环和一些 python 代码在 SPSS 中使用 python(我有点管理它......)自动化一些表格,但它只工作正常第一次我 运行 语法,第二次它只列出一次:
我有一个 SPSS 文件,其中合并了不同的项目(即不同的国家/地区),所以首先我尝试使用内置函数提取项目列表。 一旦我有了我的项目列表,我就 运行 一个循环,然后我更改了案例选择和制表的 spss 语法。
这是代码:
begin program.
import spss
#Function that extracts the data from spss
def DatiDaSPSS(vars, num):
if num == 0:
num = spss.GetCaseCount()
if vars == None:
varNums = range(spss.GetVariableCount())
else:
allvars = [spss.GetVariableName(i) for i in range(spss.GetVariableCount())]
varNums = [allvars.index(i) for i in vars]
data = spss.Cursor(varNums)
pydata = data.fetchmany(num)
data.close()
return pydata
#store the result of the function into a list:
all_prj=DatiDaSPSS(vars=["Project"],num=0)
#remove duplicates and keep only the country that i need:
prj_list=list(set([i[0] for i in all_prj]))
#loop for the tabulation:
for i in range(len(prj_list)):
prj_now=str(prj_list[i])
spss.Submit("""
compute filter_$=Project='%s'.
filter by filter_$.
exe.
TEXT "Country"
/OUTLINE HEADING="%s" TITLE="Country".
CTABLES
/VLABELS VARIABLES=HisInterviewer HisResult DISPLAY=DEFAULT
/TABLE HisInterviewer [C][COUNT F40.0, ROWPCT.COUNT PCT40.1] BY HisResult [C]
/CATEGORIES VARIABLES=HisInterviewer HisResult ORDER=A KEY=VALUE EMPTY=EXCLUDE TOTAL=YES
POSITION=AFTER
/CRITERIA CILEVEL=95.
""" %(prj_now,prj_now))
end program.
当我 运行 它第二次显示时,它只显示列表的最后一个值(并且只有一个列表)。如果我重新启动 SPSS,它第一次工作正常。
是功能的原因吗?
我正在使用 spss25
我可以自己回复吗,我应该编辑讨论还是删除讨论?我想我找到了原因,我猜这个函数只获取已经选择的值,我现在尝试在开始之前添加这个 SPSS 代码,它似乎工作正常:
use all.
exe.
begin program.
...
在最后一个循环中有一个数据过滤器,我在 运行 脚本之前将其删除。如果您希望我编辑或删除消息,请告诉我