【问题标题】:Change scale variable into multiple nominal variables将尺度变量更改为多个名义变量
【发布时间】:2015-04-15 13:55:25
【问题描述】:

我正在尝试创建一个年龄变量,然后将其拆分为多个变量,以便将多个文件聚合在一起。我一直在使用以下语法将 Age 变量拆分为 9 个年龄类别,并且效果很好,但我现在想将其拆分为 50 个变量。数据集中的年龄范围从 20 到 70,因此我想创建 50 个变量,age20、age21 等,其中 1 代表该人的年龄变量(即我 25 岁,年龄 25 我的记录将有 1 和所有其他agexx变量为0)。我知道我可以使用下面的代码并以这种方式创建 50 个变量,但是有没有一种更简单的方法可以将 zz 的结果作为 Age,然后为 agezz 输入 1?

COMPUTE Date = DATE.DMY(31,03,2014) .
EXECUTE .
COMPUTE Age = DATEDIF(Date, DOB, "years").
VARIABLE LABEL Age.
VARIABLE LEVEL Age (SCALE).
FORMATS Age (F5.0).
VARIABLE WIDTH Age(5).
EXECUTE.

**create new variables**


IF (Age < 25) Age1=1.
EXECUTE.

IF (Age>=25 & Age<30) Age2=1.
EXECUTE.

IF (Age>=30 & Age<35) Age3=1.
EXECUTE.

IF (Age>=35 & Age<40) Age4=1.
EXECUTE.

IF (Age>=40 & Age<45) Age5=1.
EXECUTE.

IF (Age>=45 & Age<50) Age6=1.
EXECUTE.

IF (Age>=50 & Age<55) Age7=1.
EXECUTE.

IF (Age>=55 & Age<60) Age8=1.
EXECUTE.

IF (Age>=60) Age9=1.
EXECUTE.

【问题讨论】:

    标签: spss


    【解决方案1】:

    考虑使用RECODE 命令创建单个年龄变量,然后进行聚合,特别是如果您的年龄组是互斥的(如您的示例中所示)。

    RECODE AGE
      (lo thru 24=1)
      (lo thru 29=2)
      (lo thru 34=3)
      (lo thru 39=4)
      (lo thru 44=5)
      (lo thru 49=6)
      (lo thru 54=7)
      (lo thru 59=8)
      (lo thru hi=9) INTO AGEGRP.
    FORMATS AGEGRP (F3.0).
    VARIABLE LABELS AGEGRP "Age Groups".
    VALUE LABELS AGEGRP
      1 "<24"
      2 "25-29"
      3 "30-34"
      4 "35-39"
      5 "40-44"
      6 "45-49"
      7 "50-54"
      8 "55-59"
      9 "60+".
    

    如果您确实想为所有年龄段生成虚拟代码,请尝试:

    DO REPEAT AgeZZ=AgeV1_20 to AgeV1_70 /ZZ=20 to 70.
       COMPUTE AgeZZ=Age=ZZ.
    END REPEAT.
    
    /* Or alternatively */.
    VECTOR AgeV2_(70).
    LOOP #i = 1 to 70.
      COMPUTE AgeV2_(#i) = Age = #i.
    END LOOP.
    

    【讨论】:

      【解决方案2】:

      要为 20 到 69 岁之间的年龄创建虚拟变量,您可以使用带有迭代变量(在本例中为“i”)的 DO REPEAT 命令。

      DO REPEAT ageN = age20 TO age69
               / i = 20 TO 69.
          COMPUTE ageN = (age=i).
      END REPEAT.
      EXECUTE.
      

      此代码的工作方式与运行以下行一样:

      COMPUTE age20 = (age=20). /* If age=20 then age20 = 1 else age20 = 0.
      COMPUTE age21 = (age=21).
      COMPUTE age22 = (age=22).
      ...
      

      【讨论】:

      • 这与 Jignesh Sutar 提供的解决方案相同,但有更多解释。
      • 谢谢,知道会有更简单的方法。
      猜你喜欢
      • 2018-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-01
      • 1970-01-01
      • 2016-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多