删除SPSS中的值标签

时间:2015-06-19 16:29:54

标签: spss

我将调查猴子的数据导入到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个变量列表的语法。我还将每周从调查猴子中提取数据,并希望每次提取数据时都要重新命名,重新编码和添加值标签的语法文件。

2 个答案:

答案 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"}