SPSS - 排名和分区

SPSS - Rank and Partition

在 SPSS Statistics 语法文件中,我希望创建一个变量来根据所需的分区列计算排名(例如,相当于 Oracle SQL 开发人员中的 SQL "rank over (partition by column_a order by column b)") .

请看例子:

没有任何过滤器的初始数据:

应用get_rank后的最终输出:

要按照所述创建排名变量,首先对数据进行排序,然后使用 LAG 函数。

SORT CASES BY column_a column_b .
compute rank=1 .
IF ($CASENUM>1 AND column_a=LAG(column_a)) rank=LAG(rank) + 1 .
EXE .

LAG 将查看先前案例的 column_a 的值。在上面的语法中,它检查 column_a 中的值是否与先前情况的值不同。

如果有,则将排名设置为 1。如果没有,则将在前一个案例的排名上加 1。首先确保您的数据已正确排序。

从那里开始,如果您只想查看排名为 1 的记录,您可以使用 FILTER BYSELECT IF 来实现。

如果您确实只需要过滤 key=1 的密钥,那么您可以使用这个:

SORT CASES BY column_a column_b .
match files /file=* /by column_a /first=key1.

现在变量 key1 将在 column_a 类别的每个第一次出现时具有值 1,您可以将它用于 filterselect.

对于完整排名变量,您可以使用这个(甚至不需要先排序):

RANK VARIABLES=b (A) BY a /RANK  /TIES=MEAN.