SPSS的功能是否类似于Stata中的双/复合引号?

时间:2017-04-10 05:02:50

标签: foreach stata spss double-quotes stata-macros

举个例子,我们有一系列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中做同样的事情?

1 个答案:

答案 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重复一次。(如果每个var1var10都有可能的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代码的嵌套循环,但您需要首先在LOOPDO REPEAT语法之外创建变量。所以我使用宏设施。