举个例子,我们有一系列10个分类变量var1, var2,..., var10
,取值从1到5。
我们从这些变量中创建5个虚拟变量。例如,我们从var1
生成dumvar1_1,..., dumvar1_5
。如果原始变量具有与伪序相对应的值,则假人将接收值1。也就是说,dumvar1_1 = 1 if var1 = 1
;否则dumvar1_1 = 0
。同样,dumvar1_2 = 1 if var1 = 2
;否则dumvar1_2 = 0
。与其他假人一样。
如果我在Stata,我会这样做:
forvalues i = 1(1)10 {
forvalues j = 1(1)5 {
generate dumvar`i'_`j' = 0
replace dumvar`i'_`j' = 1 if var`i' == `j'
}
}
有没有办法在SPSS中做同样的事情?
答案 0 :(得分:1)
简单地使用SPSSINC CREATE DUMMIES
扩展命令(随我的V24一起安装)确实接近你想要的。
SPSSINC CREATE DUMMIES VARIABLE=var1 TO var10
ROOTNAME1=dumvar1 dumvar2 dumvar3 dumvar4 dumvar5 dumvar6 dumvar7 dumvar8 dumvar9 dumvar10
/OPTIONS ORDER=A USEVALUELABELS=NO USEML=YES OMITFIRST=NO.
唯一的区别是后期脚本编号从1到50,而不是每1到5重复一次。(如果每个var1
到var10
都有可能的5个值。)
对于普通的SPAP方法,您可以使用宏设施。
DATA LIST FREE / var1 TO var10 (10F1.0).
BEGIN DATA
1 2 3 4 5 1 2 3 4 5
END DATA.
DATASET NAME Sim.
EXECUTE.
DEFINE !MakeDums (Pre = !TOKENS(1)
/N = !TOKENS(1)
/V = !CMDEND)
VECTOR V = !V.
!DO !I = 1 !TO !N
!LET !VecStub = !CONCAT(!Pre,!I,"_")
VECTOR !VecStub (5,F1.0).
COMPUTE !VecStub(V(!I)) = 1.
!DOEND
!ENDDEFINE.
!MakeDums Pre=dumvar N=10 V = var1 TO var10.
RECODE dumvar1_1 TO dumvar10_5 (SYSMIS = 0).
EXECUTE.
您可以在SPSS中执行类似于Stata代码的嵌套循环,但您需要首先在LOOP
或DO REPEAT
语法之外创建变量。所以我使用宏设施。