SPSS Python - 访问值标签的快速(更)方法

SPSS Python - fast(er) way of accessing Value Labels

我正在尝试提取变量的名称、标签和值标签。我注意到所有赋值都非常快,除了引用 ValueLabels 的那个。在我的测试数据集上,如果我注释掉那一行,其他一切都需要大约 1 秒。但是仅这一行就使整个代码延迟了大约 15 秒,并且测试数据集不是很大(至少按照我的标准:))

这是访问变量字典所固有的东西吗?或者是否有另一种更快的方法来提取整个字典,而无需逐个变量...?

begin program.

import spss
import spssaux

vardict = spssaux.VariableDict()

var_list=[]
var_values={}
var_type={}
var_labels={}

for i in range(spss.GetVariableCount()):
    var=spss.GetVariableName(i)
    var_list.append(var)

    #this is the line causing the massive delay
    var_values[var]=vardict[i].ValueLabels

    var_type[var]=str(spss.GetVariableFormat(i)[0])
    var_labels[var]=vardict[i].VariableLabel

end program.

事实上,我只需要它来检查变量是否定义了值标签。但我不知道如何以任何其他方式检查它。

事实证明,使用 spssaux 模块是这里的罪魁祸首。我不知道为什么,因为几乎所有的 Internet 知识都指向获取价值标签的方式。

然而,我偶然发现了 `spss' 模块的帮助,它指出:

 |  valueLabels
 |      Get, set or delete value labels. The set of value labels for a particular variable is represented
 |      as a Python dictionary whose keys are the values for which labels are being set and whose
 |      values are the associated labels. Labels must be specified as quoted strings.
 |
 |         --examples
 |         # Get all value labels for a specified variable
 |         import spss
 |         spss.StartDataStep()
 |         datasetObj = spss.Dataset()
 |         varObj = datasetObj.varlist['minority']
 |         vallabels = varObj.valueLabels
 |         spss.EndDataStep()

因为我只想知道变量是否有(或没有)值标签,我创建了一个字典来存储每个变量的 valueLabels 字典的长度:

begin program.
# Get all value labels for a specified variable
import spss
spss.StartDataStep()
datasetObj = spss.Dataset()

var_labels={}
for var in datasetObj.varlist:
    var_labels[var.name]=len(var.valueLabels)

spss.EndDataStep()

print var_labels

end program.

它是瞬时的,即使是大文件。 (我承认,"large" 的含义可能因用户而异;我在 "large" 文件上 30 分钟后停止了 OP 中的代码,因为它显然不合时效)。