【问题标题】:How can I loop through variables in SPSS? I want to avoid code duplication如何循环遍历 SPSS 中的变量?我想避免代码重复
【发布时间】:2011-02-22 11:47:31
【问题描述】:

是否有一种“本机”SPSS 方法来遍历一些变量名?我要做的就是获取一个变量列表(我定义的)并为它们运行相同的过程:

伪代码 - 不是一个很好的例子,但可以理解...

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

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

SPSS 必须有一些本地方法才能做到这一点......对吗?

【问题讨论】:

    标签: statistics loops spss


    【解决方案1】:

    如何为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
    

    谢谢。

    【讨论】:

      【解决方案2】:

      在一次数据传递中执行所有这些频率会更有效,例如, 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 www.spss.com/devcentral 提供的(免费)Python 插件。

      当然,你可以使用宏来处理这类事情,但是一旦你掌握了 Python 的窍门,它就会变得更加强大和简单。

      【讨论】:

        【解决方案3】:

        是的,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.
        

        (以上内容未经测试。可能某处缺少句号等)

        【讨论】:

        • 这绝对行不通-不仅仅是因为缺少一个时期。 LOOPDO REPEAT 只影响转换命令,它们对像 FREQUENCIES 这样的输出命令没有影响。
        【解决方案4】:

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

        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
        

        请参阅 SPSS Statistics 17.0 命令语法参考,地址为http://support.spss.com/ProductsExt/SPSS/Documentation/SPSSforWindows/index.htm

        请注意,我已经有好几年没有真正使用 SPSS了。

        【讨论】:

          【解决方案5】:

          循环变量有两种简单的解决方案(与在 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  /.
          

          【讨论】:

            【解决方案6】:

            我没有经常使用 SPSS 宏,但也许它们可以将您带到您需要的地方?看看这个网站的一些例子:

            http://spsstools.net/Macros.htm

            此外,SPSS Data Management 书籍也可能会有所帮助。

            最后,如果没记错的话,我认为问题甚至可能是如何在 SPSS 语法中利用 Python 的主要示例。我只用过几次 Python 和 SPSS,但如果需要的话,使用该语言非常方便。

            HTH

            【讨论】:

              【解决方案7】:

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

              “因为我们正在循环更多 不止一个变量,我们需要使用 蟒蛇。”

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

              呃...很抱歉成为那个人,但也许是时候切换到不同的统计系统了。

              【讨论】:

              • 嗯,我也有 SAS,但 SPSS 似乎更适合我正在做的大多数点击式统计类型。感谢您的建议 :) 也许我会弄清楚这项任务的 SAS 代码...
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-06-24
              • 1970-01-01
              • 2013-05-25
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多