如何使用 Python 为循环目的编写 SPSS 语法
How to write SPSS syntaxes using Python for looping purpose
我有一个基线和 Post 变量列表,我想要 运行 描述性统计和 ANCOVA。
Baseline variables = [Brief2_Inhibit_T_SELF_BL, Brief2_Completion_T_SELF_BL, Brief2_Shift_T_SELF_BL]
Post variables = [Brief2_Inhibit_T_SELF_PO, Brief2_Completion_T_SELF_PO, Brief2_Shift_T_SELF_PO]
Treatment_Group is on variable with two labels [1 - Intervention, 0- Control]
下面是每对变量的 SPSS 语法。
EXAMINE VARIABLES=Brief2_Inhibit_T_SELF_BL Brief2_Inhibit_T_SELF_PO BY Treatment_Group
/PLOT NONE
/STATISTICS DESCRIPTIVES
/CINTERVAL 95
/MISSING LISTWISE
/NOTOTAL.
UNIANOVA Brief2_Inhibit_T_SELF_PO BY Treatment_Group WITH Brief2_Inhibit_T_SELF_BL
/METHOD=SSTYPE(3)
/INTERCEPT=INCLUDE
/PRINT ETASQ DESCRIPTIVE HOMOGENEITY
/CRITERIA=ALPHA(.05)
/DESIGN=Brief2_Inhibit_T_SELF_BL Treatment_Group.
我从 UCLA 找到了一个有用的指南,可以循环遍历两个变量列表以 运行 回归。
begin program.
import spss, spssaux
spssaux.OpenDataFile('d:\data\elemapi2.sav')
vdict=spssaux.VariableDict()
dlist=vdict.range(start="api00", end="ell")
ilist=vdict.range(start="grad_sch", end="enroll")
ddim = len(dlist)
idim = len(ilist)
if ddim != idim:
print "The two sequences of variables don't have the same length."
else:
for i in range(ddim):
mydvar = dlist[i]
myivar = ilist[i]
spss.Submit(r"""
regression /dependent %s
/method = enter %s.
""" %(mydvar, myivar))
end program.
我如何编辑上面的列表以运行我的 SPSS 语法?
下面是使用简单的 SPSS 宏执行此操作的方法:
这将是宏定义:
define !doAnalysis (!pos=!cmdend)
!do !vr !in (!1)
!let !BL=!concat(!vr,"_BL")
!let !PO=!concat(!vr,"_PO")
EXAMINE VARIABLES=!BL !PO BY Treatment_Group
/PLOT NONE
/STATISTICS DESCRIPTIVES
/CINTERVAL 95
/MISSING LISTWISE
/NOTOTAL.
UNIANOVA !PO BY Treatment_Group WITH !BL
/METHOD=SSTYPE(3)
/INTERCEPT=INCLUDE
/PRINT ETASQ DESCRIPTIVE HOMOGENEITY
/CRITERIA=ALPHA(.05)
/DESIGN=!BL Treatment_Group.
!doend
!enddefine.
宏现在构建为获取项目列表,逐一循环,从列表中的每个项目创建两个名称 - 通过添加 "BL" 或 "PO",并使用这些名字 运行 你的分析。
这将是宏调用:
!doAnalysis Brief2_Inhibit_T_SELF Brief2_Completion_T_SELF Brief2_Shift_T_SELF .
我有一个基线和 Post 变量列表,我想要 运行 描述性统计和 ANCOVA。
Baseline variables = [Brief2_Inhibit_T_SELF_BL, Brief2_Completion_T_SELF_BL, Brief2_Shift_T_SELF_BL]
Post variables = [Brief2_Inhibit_T_SELF_PO, Brief2_Completion_T_SELF_PO, Brief2_Shift_T_SELF_PO]
Treatment_Group is on variable with two labels [1 - Intervention, 0- Control]
下面是每对变量的 SPSS 语法。
EXAMINE VARIABLES=Brief2_Inhibit_T_SELF_BL Brief2_Inhibit_T_SELF_PO BY Treatment_Group
/PLOT NONE
/STATISTICS DESCRIPTIVES
/CINTERVAL 95
/MISSING LISTWISE
/NOTOTAL.
UNIANOVA Brief2_Inhibit_T_SELF_PO BY Treatment_Group WITH Brief2_Inhibit_T_SELF_BL
/METHOD=SSTYPE(3)
/INTERCEPT=INCLUDE
/PRINT ETASQ DESCRIPTIVE HOMOGENEITY
/CRITERIA=ALPHA(.05)
/DESIGN=Brief2_Inhibit_T_SELF_BL Treatment_Group.
我从 UCLA 找到了一个有用的指南,可以循环遍历两个变量列表以 运行 回归。
begin program.
import spss, spssaux
spssaux.OpenDataFile('d:\data\elemapi2.sav')
vdict=spssaux.VariableDict()
dlist=vdict.range(start="api00", end="ell")
ilist=vdict.range(start="grad_sch", end="enroll")
ddim = len(dlist)
idim = len(ilist)
if ddim != idim:
print "The two sequences of variables don't have the same length."
else:
for i in range(ddim):
mydvar = dlist[i]
myivar = ilist[i]
spss.Submit(r"""
regression /dependent %s
/method = enter %s.
""" %(mydvar, myivar))
end program.
我如何编辑上面的列表以运行我的 SPSS 语法?
下面是使用简单的 SPSS 宏执行此操作的方法:
这将是宏定义:
define !doAnalysis (!pos=!cmdend)
!do !vr !in (!1)
!let !BL=!concat(!vr,"_BL")
!let !PO=!concat(!vr,"_PO")
EXAMINE VARIABLES=!BL !PO BY Treatment_Group
/PLOT NONE
/STATISTICS DESCRIPTIVES
/CINTERVAL 95
/MISSING LISTWISE
/NOTOTAL.
UNIANOVA !PO BY Treatment_Group WITH !BL
/METHOD=SSTYPE(3)
/INTERCEPT=INCLUDE
/PRINT ETASQ DESCRIPTIVE HOMOGENEITY
/CRITERIA=ALPHA(.05)
/DESIGN=!BL Treatment_Group.
!doend
!enddefine.
宏现在构建为获取项目列表,逐一循环,从列表中的每个项目创建两个名称 - 通过添加 "BL" 或 "PO",并使用这些名字 运行 你的分析。
这将是宏调用:
!doAnalysis Brief2_Inhibit_T_SELF Brief2_Completion_T_SELF Brief2_Shift_T_SELF .