提前为这篇漫长的帖子道歉。我名义上熟悉Python,但认为它可以轻松完成任务。一些背景: 我有调查数据,被调查者被要求选择他们正在考虑申请的两所学校,在1500左右的名单中。数据存储为两个变量(每个机构选择一个--vname“Institution_1”,“Institution_2”),其中每个值唯一地标识特定机构。
后来,受访者对他们在一系列属性上以1比6的比例选择的机构进行了评分。这些评级中的每一个都作为单独的比例变量存储在数据中,我有两个 - 对应于选择机构的位置。例如,如果Adelphi大学是“Institution_1”那么“核心学者”的评级“存储在变量”Q.32_combined_1“中;如果Adelphi大学是“Institution_2”,那么“核心学者”的评级将存储在变量“Q.36_combined_1”中。
我想结合每个机构的评级,这里是这个机构的SPSS语法(Adelphi唯一标识为188429的有意义值):
DO IF (Institution_1 = 188429).
COMPUTE Adelphi_CoreAcad=Q.32_combined_1.
ELSE IF (Institution_2 = 188429).
COMPUTE Adelphi_CoreAcad =Q.36_combined_1.
END IF.
EXECUTE.
但我们的数据中有1,000多家机构。我们如何在这两个列表(Institution_1和Institution_2)上为每个唯一值创建变量。 有没有办法使用Python来创建这些变量和/或构建可行的SPSS语法?
谢谢!
答案 0 :(得分:2)
试试这个。这很粗糙,因为我没有SPSS,但我认为这就是你所要求的。 (注意:我不确定你要求的是正确的东西,但看看它是否有效,也许我们会从那里开始。)
这会创建一组名为U188429_CoreAcad等的变量。其中U只是前导前缀(“单位ID”为“U”),188429是单位ID,“CoreAcad”是一个组成的字符串,你可以更改。
我使用了类别'CoreAcad','PrettyCoeds','FootballTeam'和'Drinking',因为如果我有这一切要重新做,那就是我对学校的评价。 (除了'CoreAcad',这是你的事。)
我认为您的类别在机构1中为32-35,在机构2中为36-39。您也可以更改以下类别。
我认为你可以spss.Submit
一起排队。如果没有,请将字符串拆分并一次提交一行。
我注释掉了“BEGIN PROGRAM”,“import spss”,“END PROGRAM”因为我只是把东西输入命令行python2.7。取消注释以供您使用。
#BEGIN PROGRAM.
#import spss, spssaux
# According to the internet, unitids are sparse values.
Unit_ids = [
188429, # Adelphi
188430, # Random #s
171204,
100001,
]
Categories = {
'CoreAcad' : ('Q.32_combined_1', 'Q.36_combined_1'),
'PrettyCoeds' : ('Q.33_combined_1', 'Q.37_combined_1'),
'FootballTeam' : ('Q.34_combined_1', 'Q.38_combined_1'),
'Drinking' : ('Q.35_combined_1', 'Q.39_combined_1'),
}
code = """
DO IF (Institution_1 = %(unitid)d).
COMPUTE U%(unitid)d_%(category)s = %(answer1)s.
ELSE IF (Institution_2 = %(unitid)d).
COMPUTE U%(unitid)d_%(category)s = %(answer2)s.
END IF.
EXECUTE.
"""
for unitid in Unit_ids:
for category, answers in Categories.iteritems():
answer1,answer2 = answers
print(code%(locals()))
#spss.Submit(code%(locals()))
#END PROGRAM.
答案 1 :(得分:1)
我建议采用不同的重组解决方案:
首先,您将两个机构分成两行,每行都有相应的评级:
varstocases /make institution from Institution_1 Institution_2
/make CoreAcad from Q.32_combined_1 Q.36_combined_1
/make otherRting from inst1var inst2var.
您可以为每个与两个机构相对应的额外评分添加另一个make
子命令
此时,您的数据每个单机构有一行及其评级。
您现在可以分析它们,例如:
means CoreAcad otherRting by institution.
或者您可以按机构汇总以分析其评分。例如:
DATASET DECLARE AggByInst.
AGGREGATE /OUTFILE='AggByInst' /BREAK=institution
/MCoreAcad MotherRting =MEAN(CoreAcad otherRting).