2017-04-10 48 views
1

以一个例如当我们有一系列10个分类变量var1, var2,..., var10我们创建从这些变量的每5个虚拟变量,其值为从1至5。SPSS的功能类似于Stata中的双/复合引号吗?

的。例如,从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

简单地说,就Stata而言,你所引用的并不是双复合词或(所用术语)复合双引号。它们是左引用和右引号,用于取消引用或评估本地宏。我不是SPSS的用户,但我怀疑你的问题对于大多数SPSS用户程序员来说是很有意义的,即使他们也知道Stata,如果你只是发布一个关于双循环的问题,那么这个问题对别人来说会更有用创建指标变量。顺便说一句,在Stata中,你可以将内部语句压缩为'generate dum \'i'_'''''''''''''''''' –

+0

感谢您澄清这个术语。虚拟/指标变量的创建是我打算做的一半。另一半是基于原始变量以相当有效的方式赋值(如Stata所做的那样)。由于历史原因,我正在开发的这个项目继承了SPSS和Stata,所以我认为这可能对那些在多个平台上工作的人有帮助。 – NonSleeper

回答

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个值。)


对于普通的香草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语法以外的变量。所以我使用宏设施。

+0

感谢您的解决方案。 – NonSleeper