对于像 Excel 中的 PERCENTRANK.INC() 这样工作的数据子集,更好的百分位排名?

Better percentile rank for subsets of data that works like PERCENTRANK.INC() in Excel?

我们在 Excel 中使用 PERCENTILERANK.INC() 没有任何问题。下面标记为 "Pctl Inc" 的列使用此公式:

=PERCENTRANK.INC($B:$B,B2,3)

我还构建了一个公式,根据另一列文本值对子集数据中的一个值子集进行排名。我的公式就像 link 中的公式一样工作: http://www.exceltactics.com/calculate-percentile-conditional-ranking-using-sumproduct/

这里是我所指的具体公式link:

=(SUMPRODUCT(($A:$A=A2)*(B2>=$B:$B)))/COUNTIF($A:$A,A2)

(请注意,网站 link 的公式有错别字,我的就是您要用来测试的那个。)

上面的公式在我下面提供的数据中被标记为 "Pctl W/in"。

"Subset Labels" 列表示它们应该属于的子集。稍后会详细介绍。 "Values to Rk" 是在所有情况下排名的项目。

我的目标是仅更改 "Pctl W/in" 公式,使其 returns 具有与 "Pctl Inc" 列相同的值(如果不涉及子集化)。 IE。我们喜欢 "Pctl Inc" 列的行为,但我们需要一个公式来模拟相同数据子集的排名样式。

这是您可以用来创建 "match" 的数据。请注意,我故意让所有 "Subset Labels" 相同,这样您就可以轻松匹配排名。 Pctl Inc 和 Pctl W/in 值在这里应该相同,因为它们都具有相同的子集标签:

没有子集:

"Pctl W/in" 数据是错误的,因此上面的 post.The 值是我目前得到的值,我希望它们像 "Pctl Inc" 值一样,当你取出子集组件:

有子集:

对于 a 的:

对于 b 的:

换句话说,如果它正常工作,所有的排名应该是这样的:

PS - 谁能告诉我如何在 Whosebug 帖子中创建好的网格?

答案如下:

=IFERROR(1-(COUNTIFS(A:A,A2,B:B,">="&B2)-1)/(COUNTIF(A:A,A2)-1),1)

备注:

  1. 数组公式可以更简单地解决这个问题,但我不能使用数组公式。
  2. IFERROR(...,1) wrap 解决了一个 #DIV/0 错误,当任何特定的子集标签只有一个时(例如,很多 a 而只有一个 b)。
  3. 这正确地模拟了 PERCENTRANK.INC() 当排名值相同时。