如何在excel(或SPSS)中基于唯一ID拆分数据集

时间:2019-07-12 01:43:28

标签: excel vba spss

我已经为此苦苦挣扎了几天,所以任何有帮助的见解的人都会为我省去很多痛苦!

enter image description here

我有一个大约95,000行的数据集。每行是参与者对特定问题的一个答复。例如,第2行是参与者A对问题1的回答,他们表示分数为2。如图所示。

理想情况下,每个参与者我需要1行回复,如下图所示:

enter image description here

我尝试了VLOOKUP,然后尝试了一个宏来删除#N / A并向上移动值,但是内存甚至无法处理VLOOKUP,因此这不是一个可行的选择。

我觉得该做些什么选择,但如果没有这样布置我的数据集,就无法进行以后的分析(以后,我需要对所有参与者的平均值进行平均,其中Q5 = 80,以此类推[Q5是一个类别代码])。

乐意提供更多详细信息。可以在excel或IBM SPSS中解决此问题。

2 个答案:

答案 0 :(得分:3)

您可以使用数据透视表执行此操作。

使用Power Query(Excel 2010 +)(在Excel 2016+中也称为Get&Transform)为您提供了更大的灵活性,例如,自动化了Headers列的命名。

如果只有五个问题,则可以使用GUI。但是,如果问题的数量可能因运行而异,则需要通过高级编辑器来完成处理该问题的代码。

如果没有,则可以使用GUI透视“问题编号”列

let
    Source = Excel.CurrentWorkbook(){[Name="Table2"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"UserID", type text}, {"QuestionNumber", Int64.Type}, {"Score", Int64.Type}}),
    #"Pivoted Column" = Table.Pivot(Table.TransformColumnTypes(#"Changed Type", {{"QuestionNumber", type text}}, "en-US"), List.Distinct(Table.TransformColumnTypes(#"Changed Type", {{"QuestionNumber", type text}}, "en-US")[QuestionNumber]), "QuestionNumber", "Score", List.Sum),
    Renames = List.Transform(List.Skip(Table.ColumnNames(#"Pivoted Column"),1), each {_, "Q" &_}),
    #"New Headers" = Table.RenameColumns(#"Pivoted Column", Renames)
in
    #"New Headers"

Stack Overflow case

enter image description here

答案 1 :(得分:1)

SPSS回答:
在新的语法窗口中运行以下代码:

casestovars /id=userid /index=questionNum /separator="".