我试图拉变量的名称,标签和值标签。我注意到所有作业都非常快,除了引用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
模块才是罪魁祸首。我不知道为什么,因为几乎所有的互联网知识都指向获取价值标签的方式。
但是,几乎偶然地,我偶然发现了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中的“大”文件中的代码,因为这显然没有时间效益)。
关于python - SPSS Python-访问值标签的快速方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47077004/