我尝试创建一个年龄变量,然后将其拆分为多个变量,以便将多个文件聚合在一起。我一直在使用以下语法将Age变量拆分为9个年龄类别,它工作正常,但我想将它现在拆分为50个变量。数据集中的年龄范围从20到70,因此我想创建50个变量,age20,age21等,其中1为年龄变量(即我25岁,我的记录将有一个1和0表示所有其他agexx变量)。我知道我可以使用下面的代码并以这种方式创建50个变量,但是有一种更简单的方法可以获取年龄的zz结果,然后为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.
答案 0 :(得分:2)
考虑使用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.
答案 1 :(得分:1)
要为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).
...