Как написать синтаксис SPSS, используя Python для циклических целей - PullRequest
1 голос
/ 02 февраля 2020

У меня есть список переменных Baseline и 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 до l oop через два списка переменных для запуска регрессии.

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?

1 Ответ

0 голосов
/ 02 февраля 2020

Вот способ сделать это с помощью простого макроса 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.

Макрос теперь построен для получения списка элементов, l oop просматривая их одно за другим, создавая два имени для каждого элемента в списке - добавляя «BL» или «PO» и используя эти имена для выполнения анализа.
Это будет вызов макроса:

!doAnalysis Brief2_Inhibit_T_SELF  Brief2_Completion_T_SELF  Brief2_Shift_T_SELF .
...