我根据变量名中的字符串选择了我需要的变量。我不确定如何只保留我的SPSS文件中的这些变量。
begin program.
import spss,spssaux
spssaux.OpenDataFile(r'XXXX.sav')
target_string = 'qb2'
variables = [var for var in spssaux.GetVariableNamesList() if target_string in var]
vars = spssaux.VariableDict().expand(variables)
nvars=len(vars)
for i in range(nvars):
print vars[i]
spss.Submit(r"""
SAVE OUTFILE='XXXX_reduced.sav'.
ADD FILES FILE=* /KEEP \n %s.
""" %(vars))
end program.
它打印出的变量列表是正确的,但它正在试图保持它们。我猜这与没有激活数据集或再次引入文件有关为什么会出现错误有关?
答案 0 :(得分:2)
您是否尝试过颠倒SAVE OUTFILE和ADD FILES命令的顺序?我没有通过Python在SPSS中运行它,但在标准SPSS中,您的语法会将文件写入磁盘,然后在内存中选择活动版本的变量 - 所以如果您以后访问保存的文件,它将是选择变量之前的版本。 如果这不起作用,你可以通过试图保持它们来解释你的意思吗?
答案 1 :(得分:2)
似乎问题已经解决,但我想指出另一种解决方案,可以在不编写任何Python代码的情况下完成。扩展命令SPSSINC SELECT VARIABLES基于变量的属性定义宏。这可以在ADD FILES命令中使用。
SPSSINC SELECT VARIABLES MACRONAME ="!selected"
/ PROPERTIES PATTERN ="。* qb2"。
添加文件/文件= * / KEEP!已选中。
SELECT VARIABLES命令实际上是在Python中实现的。其选择标准还可以包括其他元数据,如类型和测量级别。
答案 2 :(得分:1)
ADD FILES FILE
之前使用SAVE
命令将已保存的文件作为"缩减"文件vars
中的元素。例如:%( " ".join(vars) )