如何在SPSS中循环变量?我想避免代码重复

时间:2010-05-21 18:12:55

标签: statistics loops spss

是否有一种“原生”SPSS方式来循环访问某些变量名称?我想要做的就是获取一个变量列表(我定义)并为它们运行相同的过程:

伪代码 - 这不是一个很好的例子,但是能够明白......

for i in varlist['a','b','c']
do
  FREQUENCIES VARIABLES=varlist[i] / ORDER=ANALYSIS.
end

我注意到人们似乎只是使用R或Python SPSS插件来实现这个基本的数组功能,但我不知道我能在多长时间内完成安装SPSS的配置(如果有的话)。

SPSS必须有一些原生方式才能做到这一点......对吗?

7 个答案:

答案 0 :(得分:6)

循环变量有两种简单的解决方案(与在SPSS中使用Python相比更容易)。

1)DO REPEAT-END REPEAT

缺点是您可以DO REPEAT-END REPEAT主要仅用于数据转换 - 例如COMPUTERECODE等。不允许使用频率。例如:

DO REPEAT R=REGION1 TO REGION5.
COMPUTE R=0.
END REPEAT.

2)DEFINE-!ENDDEFINE(宏观设施)

您可以使用宏命令在变量循环中执行频率。例如:

DEFINE macdef (!POS !CHAREND('/'))
!DO !i !IN (!1)
frequencies variables = !i.
!DOEND
!ENDDEFINE.

macdef VAR1 VAR2 VAR3  /.

答案 1 :(得分:5)

如果我正确理解了这个问题,可能就没有必要使用循环结构。带有VARIABLES子命令的SPSS命令(如FREQUENCIES)允许您指定多个变量。

FREQUENCIES的基本语法是:

FREQUENCIES
    VARIABLES= varlist [varlist...] 

其中[varlist]是单个变量名称,多个以空格分隔的变量名称,使用TO关键字指定的一系列连续变量,关键字ALL或先前选项的组合。

例如:

FREQUENCIES VARIABLES=VARA

FREQUENCIES VARIABLES=VARA VARB VARC

FREQUENCIES VARIABLES=VARA TO VARC     

FREQ VAR=ALL

FREQ VAR=VARA TO VARC VARM VARX TO VARZ

请参阅http://support.spss.com/ProductsExt/SPSS/Documentation/SPSSforWindows/index.htm

上提供的 SPSS Statistics 17.0命令语法参考

请注意,自从我实际使用SPSS以来已经有好几年了。

答案 2 :(得分:1)

在一次数据传递中执行所有这些频率更有效,例如, FREQUENCIES a to c. 但Python允许你做循环和许多其他控制流程技巧。

begin program.
import spss
for v in ['a','b','c']:
  spss.Submit("FREQUENCIES " + v)
end program.

使用Python需要安装SPSS Developer Central提供的(免费)Python插件www.spss.com/devcentral

当然,你可以使用宏来做这类事情,但是一旦你掌握了它,Python就会变得更加强大和容易。

答案 3 :(得分:1)

是的,SPSS可以做到这一点。听起来像加州大学洛杉矶分校的人使用python'因为他们知道如何在python中而不是在SPSS中。 :)

让我们调用您的变量VARA,VARB,VARC。它们必须是数字的(因为你正在做频率)并且它们必须在你的spss数据文件中是连续的。然后你创建一个矢量说实际上“这里是我要循环的一系列变量”。

VECTOR VectorVar = VarA TO VarC.
LOOP #cnt = 1 to 3 by 1.
    FREQUENCIES VARIABLES=VectorVar(#cnt) / ORDER=ANALYSIS
ENDLOOP.
EXECUTE.

(上面的内容尚未经过测试。可能会错过一段时间,等等。)

答案 4 :(得分:0)

Here's a page from UCLA's Academic Technology Services that describes looping over lists of variables。引用,

  

“因为我们正在循环更多   比一个变量,我们需要使用   的Python“。

根据我的经验,UCLA ATS可能是所有主要统计计算系统覆盖率最高的网站。如果他们说你需要Python ......你可能需要Python。

呃...对不起那个人,但也许是时候切换到不同的统计系统了。

答案 5 :(得分:0)

我没有非常使用SPSS宏,但也许他们可以帮到你需要的地方?查看此站点以获取一些示例:

http://spsstools.net/Macros.htm

此外,SPSS数据管理书籍也可能有所帮助。

最后,如果内存服务,我认为问题甚至可能是如何在SPSS语法中利用Python的主要示例。我只使用过Python和SPSS几次,但如果需要,可以使用这种语言非常方便。

HTH

答案 6 :(得分:-2)

如何为spss做这个stata sintxis。

foreach var of varlist  pob_multi pob_multimod pob_multiex vul_car vul_ing nopob_nov espacio carencias carencias_3 ic_rezedu ic_asalud ic_ss  ic_cv  ic_sbv ic_ali  pobex pob  {
    tabstat `var' [w=factor] if pob_multi!=., stats(mean) save
    matrix define `var'_pp =(r(StatTotal))
    matrix rownames `var'_pp = `var'_pp
}

matrix tabla1 = (pob_multi_pp \ pob_multimod_pp \ pob_multiex_pp \ vul_car_pp \ vul_ing_pp \ nopob_nov_pp \ espacio_pp \ carencias_pp \ carencias_3_pp \ espacio_pp \ ic_rezedu_pp\ ic_asalud_pp \ ic_ss_pp \ ic_cv_pp \ ic_sbv_pp\ ic_ali_pp \ espacio_pp \ pobex_pp \ pob_pp   )
matrix list tabla1

感谢。