【问题标题】:Perform calculation on a different number of rows for each ID为每个 ID 计算不同的行数
【发布时间】:2021-07-12 17:58:34
【问题描述】:

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

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

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

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

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

如您所见,此人第 6 次得分至少为 40 便士。我想从现在开始取平均值。所以在这种情况下是 (45+41+32+34+47)/6.

我也想知道我是否认为一个人“聪明”。一个聪明的人是一个至少有 2 个数学分数和 40p+ 的人(剂量必须彼此之后,2 个单独的场合是可以的)

我该怎么做?

【问题讨论】:

  • 另外,我想做一个 N_break nr 看看他们有多少次得分超过 40p。
  • 有几种方法可以做到这一点,但要选择正确的一种,我们需要更多地了解您的数据结构。例如,每个 ID 是否出现在十行中,每行都有不同的测试,或者一行有十个变量,十个测试?请编辑您的原始帖子以添加对您的数据的描述,更好的是 - 在帖子中添加数据示例。
  • 感谢您回答 ELI-k。想知道怎么寄。我已经编辑了帖子。如果您能提供帮助,我将不胜感激! :)

标签: encoding average spss


【解决方案1】:

在下面的代码中,我假设您有一个变量来标识每个 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.

【讨论】:

  • 感谢您的时间。如果我不清楚,我想知道,但首先我必须确定有多少被认为是“擅长数学”,即 1 或 0(1 = 擅长数学,0 = 不擅长数学)。所以我想知道有多少人最初没有被认为是好的,但在做这些测试后变得“好”。如果一个人至少有 2 次测试得分超过 40 分,那么他们就是“擅长数学”。如何为它创建 N_break nr。这是我取平均值之前必须做的第一步。
  • 希望我理解你的正确 - 请参阅我对答案的补充
  • 我是 SPSS 新手,所以有时我很难理解某些东西的含义。我如何对每个 ID 超过 40p 的所有分数进行排序。尽管我尝试了您的方法,但我为每个 ID 匹配了 1,2,3...10(即使他们没有 40p)。我只想要40p的分数。如果我使用 N_break,我会为每个 ID 获得 10 个。因为我无法分析每个人有多少 40p。你能不能试着解释更多更简单的术语,因为我也很新。
  • 我更正了代码中的输入错误,请重试。一些解释:变量ScoreOver40 为每个超过 40 的分数获取值 1(每个低于 40 的分数为 0)。在聚合变量中,NumScores40P 是每个 ID 的 ScoreOver40 的总和,因此它实际上是该 ID 超过 40 的分数数。所以是的 - 我仍在汇总 10 行,并且 N_break 始终为 10 - 但高分的数量在变量 NumScores40P 中。
  • 所以我有 40p 或更多的变量。什么应该是“中断变量”,什么应该是 aggerate 函数中的“变量摘要”?当我只将 40p 变量作为“中断变量”时,它只计算有多少行 1 和 0,并且每个 ID nr 的计数不同
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-21
  • 2022-11-04
相关资源
最近更新 更多