变量组的复杂循环

Complex looping through groups of variables

我有一个如下所示的 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

基本上我想遍历变量(列)和 return 可靠性度量 Cronbach's 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 语法 return 是 Cronbach 的 alpha 和个案数量的度量。我想要 return 一个如下所示的数据框:

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

我有点缺乏找到正确解决方案的创造力。真的在寻找一些想法,你将如何解决这个问题。非常感谢!

首先,我创建了两个数据集来模拟您的两个文件——一个包含您的 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 列表 - 您可以将索引号添加到列表中,并将其与 MyAlphas.

中的 TableNumber_ 匹配