变量组的复杂循环
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_
匹配
我有一个如下所示的 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_
匹配