【发布时间】:2017-05-22 20:16:30
【问题描述】:
我有一些 .sav 文件要检查是否存在错误数据。我所说的不良数据与问题无关。我已经使用 spss 模块在 python 中编写了一个脚本来检查案例,如果它们不好则删除它们。我通过定义一个数据集对象然后获取它的案例列表来在数据步中做到这一点。然后我使用
del datasetObj.cases[k]
删除数据步骤中的问题案例。
这是我的问题:
假设我有一个数据集 foo.sav,它是 spss 中的活动数据集,那么我可以运行类似的东西:
BEGIN PROGRAM PYTHON.
import spss
spss.StartDataStep()
datasetObj = spss.Dataset()
caselist = datasetObj.cases
del caselist[k]
spss.EndDataStep()
END PROGRAM.
从 spss 客户端中,它将从数据集 foo.sav 中删除案例 k。但是,如果我使用 foo.sav 的目录作为工作目录运行以下内容:
import os, spss
pathname = os.curdir()
foopathname = os.path.join(pathname, 'foo.sav')
spss.Submit("""
GET FILE='%(foopathname)s'.
DATASET NAME file1.
DATASET ACTIVATE file1.
""" %locals())
spss.StartDataStep()
datasetObj = spss.Dataset()
caselist = datasetObj.cases
del caselist[3]
spss.EndDataStep()
从命令行,那么它不会删除大小写 k。获取值的类似代码可以正常工作。例如,
print caselist[3]
将打印大小写 k(当它在数据步骤中时)。我什至可以更改案例中各个条目的值。但它不会删除案例。有什么想法吗?
我是python和spss的新手,所以可能有一些我看不到的东西对其他人来说是显而易见的;因此我为什么要问这个问题。
【问题讨论】: