我将调查猴子的数据导入到spss中,调查猴子会自动分配值和值标签。我的价值观和标签目前是这样的:
1"已婚" 2" Single" 3" 777" 4" 999"
我重新编码变量,使得3 = 777和4 = 999。然后我将777和999设置为丢失。然后,我使用ADD VALUE LABELS添加777 ="拒绝"并且999 ="不知道"。如何使用语法删除3和4的值和值标签?这些不再是真的,因为我重新编码了值3和4.我知道我可以使用VALUE LABELS删除我的所有值和标签,但我必须指定所有类别,这将是乏味的。理想情况下,我想重新编码3和4值,为新的777和999值添加值标签并删除旧的3和4.如果我只有一些变量,我会考虑采用不同的方式,但我想要编写我可以用于大约100个变量列表的语法。我还将每周从调查猴子中提取数据,并希望每次提取数据时都要重新命名,重新编码和添加值标签的语法文件。
答案 0 :(得分:3)
我不相信有一种方法可以删除特定值的特定值标签。因此,解决方法是显式设置整个值集的值:
DATA LIST FREE / MS.
BEGIN DATA
1 2 3 4
END DATA.
/* 1. Original values labels */.
VALUE LABELS MS 1 "Sinlge" 2 "Married" 3 "777" 4 "999".
CTABLES /TABLE MS[C].
/* 2. Recode values and re-label - Note values 3 and 4 are still assigned values but they happen to be blank as they are being registered by CTABLES */.
RECODE MS (3=777) (4=999).
ADD VALUE LABELS MS 3 "" 4 "" 777 "Refused" 999 "Unknown".
CTABLES /TABLE MS[C].
/* 3. Workaround is to assign explicitly entire set of values */.
VALUE LABELS MS 1 "Sinlge" 2 "Married" 777 "Refused" 999 "Unknown".
CTABLES /TABLE MS[C].
嗯,在计算领域没有什么是不可能的。 Raynald Levesque概述了一种解决方案here。 Ruben Geert van den Berg也在他的website上提供了一个python解决方案。
答案 1 :(得分:0)
这可以用SPSS语法中的python开始程序块来实现:
DATA LIST FREE / MS (F1.0).
BEGIN DATA
END DATA.
VALUE LABELS MS 1 "Married" 2 "Single" 3 "777" 4 "999".
ADD VALUE LABELS MS 777 "Refused" 999 "Don't know".
BEGIN PROGRAM.
import spss
qst='MS'
values=[3,4]
with spss.DataStep():
datasetObj=spss.Dataset();varObj = datasetObj.varlist[qst];valObj=varObj.valueLabels
print 'Before:',valObj
for i in values:
try:
del valObj[i]
except:
continue
print 'After:',valObj
END PROGRAM.
输出日志:
Before: {1.0: 'Married', 2.0: 'Single', 3.0: '777', 4.0: '999', 999.0: "Don't know", 777.0: 'Refused'}
After: {1.0: 'Married', 2.0: 'Single', 777.0: 'Refused', 999.0: "Don't know"}