SPSS有类似Stata中double/compound引号的功能吗?

Does SPSS have functions similar to double/compound quotes in Stata?

举个例子,我们有一系列 10 个分类变量 var1, var2,..., var10,它们的值从 1 到 5。

我们从这些变量中的每一个创建 5 个虚拟变量。例如,从 var1 我们生成 dumvar1_1,..., dumvar1_5。如果原始变量具有与虚拟人的顺序对应的值,则虚拟人将收到值 1。即dumvar1_1 = 1 if var1 = 1dumvar1_1 = 0 否则。同样,dumvar1_2 = 1 if var1 = 2dumvar1_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 中做同样的事情?

只需使用 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.

唯一的区别是 post 脚本编号从 1 到 50,而不是每隔 1 到 5 重复一次。(如果每个 var1var10 都有所有可能的 5 个值.)


对于普通的 SPSS 方法,您可以使用宏工具。

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 语法之外创建变量。所以我使用宏工具。