SPSS中的Python-KEEP变量

SPSS中的Python-KEEP变量,python,spss,Python,Spss,我已经根据变量名中的字符串选择了所需的变量。我不知道如何从我的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()

我已经根据变量名中的字符串选择了所需的变量。我不知道如何从我的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.

它打印出的变量列表是正确的,但是它试图保留它们却失败了。我猜这与不激活数据集或不重新引入文件有关,因为会出现错误?

您是否尝试过颠倒“保存输出文件”和“添加文件”命令的顺序?我没有通过Python在SPSS中运行这个,但是在标准SPSS中,您的语法会将文件写入磁盘,然后在内存中为活动版本选择变量——因此,如果以后访问保存的文件,它将是选择变量之前的版本。
如果这不起作用,你能解释一下你试图保留它们是什么意思吗?

你是否尝试过颠倒SAVE OUTFILE和ADD FILES命令的顺序?我没有通过Python在SPSS中运行这个,但是在标准SPSS中,您的语法会将文件写入磁盘,然后在内存中为活动版本选择变量——因此,如果以后访问保存的文件,它将是选择变量之前的版本。 如果这不起作用,你能解释一下你试图留住他们是什么意思吗

  • 您需要在
    保存
    之前使用
    添加文件
    命令,将保存的文件变为“精简”文件
  • 我认为python程序中的最后一行应该尝试加入列表
    vars
    中的元素。例如:
    %(“”.join(vars))
  • 您需要在
    保存
    之前使用
    添加文件
    命令,将保存的文件变为“精简”文件
  • 我认为python程序中的最后一行应该尝试加入列表
    vars
    中的元素。例如:
    %(“”.join(vars))

  • 这个问题似乎已经解决了,但我想指出另一个不用编写任何Python代码就可以完成的解决方案。扩展命令SPSSINC SELECT VARIABLES根据变量的属性定义宏。这可以在“添加文件”命令中使用

    SPSSINC选择变量宏名称=“!已选择” /属性模式=“*qb2”。
    添加文件/FILE=*/KEEP!选中


    selectvariables命令实际上是用Python实现的。它的选择标准还可以包括其他元数据,如类型和度量级别。

    问题似乎已经解决,但我想指出另一个解决方案,它可以在不编写任何Python代码的情况下完成。扩展命令SPSSINC SELECT VARIABLES根据变量的属性定义宏。这可以在“添加文件”命令中使用

    SPSSINC选择变量宏名称=“!已选择” /属性模式=“*qb2”。
    添加文件/FILE=*/KEEP!选中


    selectvariables命令实际上是用Python实现的。它的选择标准还可以包括其他元数据,如类型和度量级别。

    我已经交换了保存输出文件和添加文件的顺序,这是有道理的,但错误似乎有所不同。对不起,我的俚语是“摔倒”,我的意思是脚本在那一点上出错了,即它试图保留变量的位置。>第25列中的Error#5241。Text:u>未定义的变量名。检查拼写,验证此>变量是否存在。是否已在此命令中删除或重命名它?>第26列中的错误#5242。Text:qb2a_1>变量列表中出现意外或无效符号。打印变量时,变量是正确的,但在后面的命令中无法识别。我不知道它从哪里找到“u”,因为它不在它打印的变量列表中。我已经交换了保存输出文件和添加文件的顺序,这是有道理的,但错误似乎有所不同。对不起,我的俚语是“摔倒”,我的意思是脚本在那一点上出错了,即它试图保留变量的位置。>第25列中的Error#5241。Text:u>未定义的变量名。检查拼写,验证此>变量是否存在。是否已在此命令中删除或重命名它?>第26列中的错误#5242。Text:qb2a_1>变量列表中出现意外或无效符号。打印变量时,变量是正确的,但在后面的命令中无法识别。我不知道它从哪里找到“u”,因为它不在它打印的变量列表中。主要问题是第二点。这已经解决了它。你能解释一下为什么需要这个吗?变量vars被编译成一个列表,所以它的元素需要被连接/连接,以便根据需要形成一个字符串。请在手前打印一个带有vars的语句,你会看到它的形式。主要问题是第二点。这已经解决了它。你能解释一下为什么需要这个吗?变量vars被编译成一个列表,所以它的元素需要被连接/连接,以便根据需要形成一个字符串。请在手前打印一份带有vars的报表,您将看到它的格式。