【问题标题】:SPSS for loop based on a variable基于变量的SPSS for循环
【发布时间】:2017-03-04 01:47:28
【问题描述】:

我刚刚学习 SPSS,我想根据我创建的变量“状态”进行简单的子组分析,该变量可以取 0 到 8 之间的值。我想一次性打印输出。

这是我想做的伪代码:

for( i = 1, i = 8, i++)
{
filter by (ststus = i)
display analysis
remove filter
}

这样我可以一次性完成所有操作,而且我可以添加到分析代码中并轻松为 8 个子组做一些事情。

我不知道它是否相关,但这是我目前要迭代的代码:

USE ALL.  
COMPUTE filter_$=(Workforce EQ 1 AND SurveySample = 1 AND State = 1).
VARIABLE LABELS filter_$ 'Workforce EQ 1 (FILTER)'. 
> VALUE LABELS filter_$ 0 'Not Selected' 1 'Selected'.  FORMATS filter_$
> (f1.0).  FILTER BY filter_$.  EXECUTE.
> 
> 
> FREQUENCIES VARIABLES = Q86 Q33 Q34 Q88 FSEScore    /BARCHART FREQ   
> /ORDER=ANALYSIS.
> 
> CROSSTABS    /TABLES=FSEScore BY Q86    /FORMAT=AVALUE TABLES   
> /CELLS=ROW    /COUNT ROUND CELL.
> 
> FILTER OFF. USE ALL.

谢谢大家。

【问题讨论】:

    标签: loops for-loop macros spss


    【解决方案1】:

    split file 命令可能会解决问题 - 它会导致您的分析报告分别显示拆分变量的每个类别的结果:

    *run your transformations.
    sort cases by status.
    split file by status.
    FREQUENCIES .....
    CROSSTABS ....
    split file off.
    

    如果这还不够,您可以使用宏来运行“状态”类别:

    先定义宏:

    define MyMacro ()
    !do !ST=1 !to 8
    * filter commands using **status = !ST**
    * transformations using **status = !ST**
        FREQUENCIES .....
        CROSSTABS ....
    !doend
    !enddefine.
    

    现在调用你的宏:

    MyMacro .
    

    【讨论】:

    • 谢谢,我正在努力解决这个问题...你能像在 python 或 c 中那样在 SPSS 中制作函数原型吗?
    【解决方案2】:

    这可能是一种非常简单的方法,上面的建议可能更明智。

    你可以将 Python 初始化为 spss。以下代码有效:

    begin program.
    import spss
    
    for i in xrange(1,8):
        string = str(i)
        spss.Submit("""
            USE ALL.
            COMPUTE filter_$=(Workforce EQ 1 AND SurveySample = 1 AND Status = %s). 
            VARIABLE LABELS filter_$ 'Workforce EQ 1 (FILTER)'. 
            VALUE LABELS filter_$ 0 'Not Selected' 1 'Selected'. 
            FORMATS filter_$ (f1.0). 
            FILTER BY filter_$. 
            EXECUTE.
    
        #analysis as required
        FREQUENCIES VARIABLES = Q86 
              /BARCHART FREQ 
              /ORDER=ANALYSIS.    
    
        """%(' '.join(string)) )
    end program.
    

    非常感谢 eli-k,我可能应该刚刚使用 splitfile。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-21
      • 1970-01-01
      • 1970-01-01
      • 2019-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多