将刻度变量更改为多个名义变量

Change scale variable into multiple nominal variables

我正在尝试创建一个年龄变量,然后将其拆分为多个变量以将多个文件聚合在一起。我一直在使用以下语法将 Age 变量拆分为 9 个年龄类别并且工作正常,但我现在想将其拆分为 50 个变量。数据集中的年龄范围从 20 岁到 70 岁,所以我想创建 50 个变量,age20,age21 等,其中 1 表示该人的年龄变量(即我 25 岁,age25 我的记录将有一个 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.

考虑使用 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.

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

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).
...