【问题标题】:Recode or compute age categories based by gender根据性别重新编码或计算年龄类别
【发布时间】:2015-09-29 14:48:59
【问题描述】:

我是一个完整的 spss 新手,但我无法弄清楚。谷歌也没有给出任何答案(或者我不知道如何用谷歌搜索这个问题......这也是可能的)。

我必须根据两个变量创建一个新变量:

性别(0=男性,1=女性)

oudad(1=18-29 岁;2=30-54 岁;3=55-89 岁;4=取消选择 99)。

新变量必须有六个类别:
1. 18-29岁男
2. 18-29岁女性
3. 30-54男
4. 30-54岁女性
.. 等等。

我想我必须通过计算或重新编码成不同的变量来做一些事情,但不知道该怎么做。

谁能帮帮我?

【问题讨论】:

    标签: spss


    【解决方案1】:

    我不知道这是否是“正确”的做法,但我就是这样做的。建议如何改进它,仍然很感激:)

    IF (gender = 0 & agegroup =1) GenAge=1.
    IF (gender = 0 & agegroup =2) GenAge=2.
    IF (gender = 0 & agegroup =3) GenAge=3.
    IF (gender = 1 & agegroup =1) GenAge=4.
    IF (gender = 1 & agegroup =2) GenAge=5.
    IF (gender = 1 & agegroup =3) GenAge=6.
    EXECUTE.
    
    VALUE  LABELS GenAge 
     1 'Young man'
     2 'Middle-aged man'
     3 'Old man'
     4 'Young woman'
     5 'Middle-aged woman'
     6 'Old woman'.
    

    【讨论】:

    • 以这种方式使用一系列 IF 命令(而不是 DO IF)需要 6 次数据传递(在此示例中 - 每个数据传递扫描数据中的所有行),而DO IF 方法只需要一次数据传递(它能够通过一次扫描所有行来实现相同的计算)。因此,对于大型数据集,以这种方式编码可能不利于计算速度。但除此之外,两者都将获得相同的结果(您应该注意到这一点)。
    【解决方案2】:

    查找DO IF 和/或IF 命令。

    DO IF (Gender = 0 /* Male*/ AND Age = 1 /* 18 -29 */).
        COMPUTE GenAge=1.
    ELSE IF (Gender = 1 /* Female */ AND Age = 1 /* 18 -29 */).
        COMPUTE GenAge=2.
    ELSE IF (Gender = 0 /* Male */ AND Age = 2 /* 30 - 54 */).
        COMPUTE GenAge=3.
    ELSE IF (Gender = 1 /* Female */ AND Age = 2 /* 30 - 54 */).
        COMPUTE GenAge=4.
    ELSE IF (Gender = 0 /* Male */ AND Age = 3 /* 55 - 89 */).
        COMPUTE GenAge=5.
    ELSE IF (Gender = 1 /* Female */ AND Age = 3 /* 55 - 89 */).
        COMPUTE GenAge=6.
    END IF.
    

    每对 /**/ 之间的内容只是为了帮助使代码更具可读性和代码所代表的内容更明显,因此完全是可选的。

    我通常不会以这种方式编写一系列IF 语句(如果有大量类别,这可能会更加麻烦),我通常会选择以另一种方式编写类似的代码,如下所示:

    RECODE Gender (0=2) (ELSE=COPY).
    VALUE LABELS Gender 1 "Female" 2 Male".
    COMPUTE GenAge=SUM(Gender*10, Age).
    VALUE LABELS GenAge.
      11 "Female 18 - 29"
      12 "Female 30 - 54"
      13 "Female 55 - 89"
      21 "Male 18 - 29"
      22 "Male 30 - 54"
      23 "Male 55 - 89".
    

    对于这种性质的分类变量,它通常与分配给它的代码无关,所以我总是更喜欢一种解决方案,它涉及编写尽可能少的代码并且也不依赖于数据本身。如果顺序很重要,您总是可以选择让Age 用第十个单位整数表示,Gender 用单个单位整数表示。

    【讨论】:

    • 你能解释一下我必须采取的确切行动,而不仅仅是语法或代码吗?因为当我尝试您的解决方案时,我从 spss 中得到了一堆错误,我必须能够通过程序而不是仅仅通过语法来做到这一点。所以计算,然后选择变量 x,然后 (...) 等等。将不胜感激!
    • 就运行代码时遇到的错误而言,我怀疑这是因为我在代码中用于GenderAge 的变量可能与您实际拥有的不同在您的数据集中,因此只需更改它们的语法以反映您在数据集中的内容。我将编辑我的帖子以指示如何使用下拉菜单实现此目的
    • 某些命令不支持使用 GUI/下拉菜单,我相信(因为在这种情况下我找不到任何帮助)“DO IF”命令可能不受支持.所以我建议学习语法。
    • 在这个例子中,一种方法是COMPUTE Age2 = oudad*2 - Gender.,因为性别是 0-1,年龄类别从 1 开始。
    • 关于变量的名称你是对的(忘记更改一个)但是当运行 Do if / compute / else if 时,我得到一个空变量(数据视图中唯一的东西是' -')。与重新编码相同.. 学习语法对我来说很好,但我们也必须展示如何使用 spss 来做到这一点。 (老师们,叹气!)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 2023-03-14
    • 2013-10-31
    • 1970-01-01
    相关资源
    最近更新 更多