我试图拉动变量'名称,标签和价值标签。我注意到除了引用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.
实际上我只需要它来检查变量是否定义了值标签。但我不知道如何以任何其他方式检查。
答案 0 :(得分:1)
事实证明,使用spssaux
模块是罪魁祸首。我不知道为什么,因为几乎所有的互联网知识都指向了获取价值标签的方式。
然而,几乎是偶然的我偶然发现了'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.
即使在大文件上也是如此。 (我承认,"大"意味着用户与用户的不同;我在一个"大"文件上30分钟后停止了OP中的代码,因为它显然不是时间效益)。