对每个 ID 执行不同行数的计算

问题描述

希望这里的聪明人可以帮助我描述如何解决这个问题。我对 SPSS 比较陌生,想选择有一定要求的案例。

我有一群身份多次进行数学测试。我们有 1000 个 ID,其中每个人 (ID) 都做了 10 次测试。现在我想选择这些人中有多少人在这次测试中至少获得了 40/50 的分数。我已经做到了。

问题来了。我现在想计算每个人在第一次至少获得 40 分后所做的所有测试的平均分数。

示例:ID nr 8 的得分为; 34,35,27,37,32,45,41,34,47 这些都在 10 个不同的行中。所以 ID nr 1 出现在 10 个不同的行中。其他 10 行中的 ID 2,依此类推。

像这样:
ID 1 得分 34
ID 1 得分 35
ID 1 得分 27

如您所见,此人在第 6 次得分至少为 40p。我想从这一点上取平均值。所以在这种情况下 (45+41+32+34+47)/6。

我也想知道我是否认为一个人“聪明”。一个聪明的人是至少有 2 个数学分数和 40p+ 的人(必须互相追逐,2 个单独的职位是可以的)

我该怎么做?

解决方法

在下面的代码中,我假设您有一个变量来标识每个 ID 的测试顺序:

sort cases by ID TestNumber.
compute ScoreOver40 = score >= 40. /* this identifies all scores g/e 40.  
compute seq=ScoreOver40.
* if seq was 1,all following seq values for same ID will also become 1.
if ID = lag(ID) and lag(seq)=1 seq=1. 
if seq=1 scoresAfterFirst40 = score.

*now to aggregate by ID.
dataset declare agg.
aggregate /out=agg /break=ID /meanAfterFirst40=mean(scoresAfterFirst40) 
     /NumScores40P = sum(ScoreOver40).

在名为 agg 的新数据集中,您应该找到每个 ID 的第一个分数为 40 或更高后的分数平均值,以及所有 10 项测试中分数为 40 或更高的计数。

编辑:
现在您可以使用聚合数据进行进一步分析。例如,您可以确定哪些 ID 具有两个或多个高 (40+) 分数:

dataset activate agg.
compute GoodAtMaths = (NumScores40P >= 2).
exe.