通过变量组进行复杂循环

时间:2017-11-17 18:11:32

标签: python spss

我的SPSS数据框看起来像这样:

K_161   K_161_A K_161_B K_161_B K_161_C K_161_D K_213
0   0   0   0   0   1   0
1   0   0   0   1   1   1
0   0   0   0   0   0   0
0   0   0   0   0   0   0
0   1   0   0   0   0   0
1   1   1   1   1   1   1
0   0   0   1   1   1   1
0   0   0   0   1   1   1
0   1   1   1   1   1   1
1   0   0   0   0   1   0
0   0   0   0   0   0   0
1   1   0   1   1   1   1
0   1   0   0   0   0   0
1   0   0   0   0   0   0
0   0   0   0   1   0   0
1   1   0   1   0   1   1
0   1   0   0   0   1   0
0   1   0   0   0   0   0
0   1   0   1   1   0   0

基本上我想循环遍历变量(列)并返回可靠性度量Cronbach的alpha的值。 可以在Python中使用以下伪代码行的东西:

BEGIN PROGRAM.
import spss

unique_ids = open("E:/company_id.txt", "r")

for i in unique_ids:
  i = "K_" + str(i)
  spss.Submit(r'''
  RELIABILITY 
  /VARIABLES= + i
  /SCALE('ALL VARIABLES') ALL 
  /MODEL=ALPHA.
  ''')

END PROGRAM.

我有大约9000列。每个循环中使用的变量可以根据它们的唯一编号进行分组:例如对于161,循环将包括K_161 K_161_A K_161_B K_161_B K161_C K_161_D,依此类推。我有一个这样的唯一数字(文本文件)列表,如下所示:

161
213
263
284
295
297
306
347

SPSS语法返回Cronbach alpha的度量以及案例数。我想返回一个如下所示的数据框:

id  cronbach    cases
161 0.651   5
213 0.856   3
263 0.752   6
284 0.927   22
295 0.884   24
297 0.934   31
306 0.902   9
347     1
398 0.405   4
457 0.884   12
491 0.137   2
507 0.909   28
571     1
590 0.738   9

我缺乏创造力来找到合适的解决方案。真的在寻找一些如何解决问题的想法。非常感谢你!

1 个答案:

答案 0 :(得分:0)

首先,我创建了两个数据集来模拟您的两个文件 - 一个带有您的ID,另一个带有实际数据用于分析:

data list free/id (f3).
begin data
161  444 213
end data.
dataset name numlist.

data list free/K_161 K_161_A K_161_B K_213_B K_161_C K_161_D K_213 K_213_A K_444 K_444_F K_444_K (11f3).
begin data
3 3 3  4 4 4 5 5 1 2 3 4 5 6 7 8 9 0 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7
end data.
dataset name main.

现在想法是使用ID列表来编写新的语法文件 对于列表中的每个项目,新语法将:
1.定义一个宏,找到主文件中所有相应的变量名称 2.对它们进行可靠性分析 OMS命令将把输出中的cronbach数据捕获到另一个数据集中:

DATASET DECLARE  MyAlphas.
OMS/SELECT TABLES/IF COMMANDS=['Reliability'] SUBTYPES=['Reliability Statistics']
   /DESTINATION FORMAT=SAV NUMBERED=TableNumber_ OUTFILE='MyAlphas' .
dataset activate numlist.
write out="path\temp macro run.sps" 
   /'SPSSINC SELECT VARIABLES MACRONAME = "!a', id, '" /PROPERTIES PATTERN=".*', id, '*".'
   /'RELIABILITY /VARIABLES= !a', id, '  /SCALE("ALL VARIABLES") ALL  /MODEL=ALPHA.'.
dataset activate main.
insert file="path\temp macro run.sps".
omsend.

此时,您有一个名为MyAlphas的数据集,其中包含运行的每个可靠性测试的cronbach值。它还没有ID,但是match files这个带有ID列表的数据集很容易 - 您可以在列表中添加索引编号,并将其与TableNumber_中的MyAlphas匹配。