嗨 JSL 专家,
我很难在 1 列中找到第二个最大值、第三个最大值等值。
对于下面的列,我希望确定前 5 个最大值,并在单独的列中标记该值。
似乎我只能找到 col max,但很难找到第二个最大值、第三个最大值等。
此解决方案是否有任何标准公式?
谢谢
(100,
232,
第343话
121,
100,
132,
100,
100,
100,
100,)
你好,
这取决于您所说的“最大”是什么意思,以及您是否愿意对表格进行排序。 我将讨论一些常见案例,并希望其中一个涵盖您的用例。
情况 1:“max”表示原始值在排序数据集中的位置,包括重复值。
您可以为此使用内置转换。 右键单击感兴趣的列中的数据,然后选择新建公式列 > 分布 > 等级(逆序)。
单击创建的公式,我们有以下内容,无论表格是否排序都有效:
(Col Number( :Col1 ) - Col Rank( :Col1 )) + 1

情况 2:“最大”表示在排序的 UNIQUE 值集中的位置(无重复)。 不愿意预先排序数据。
***注意:由于它依赖于关联数组,此方法仅适用于最多一位小数的数字数据。
我们可以使用复杂(且昂贵)的公式:
Loc(
Matrix(
Reverse(
Associative Array( (:Col1 << get data table) :: col1 << getvalues ) << get keys
)
),
:Col1
)
此公式执行以下操作:
1) 从感兴趣的列中获取值并将它们传递给关联数组,该数组删除重复项。
2) 获取关联数组键(默认从低到高的顺序)并颠倒它们的顺序。
3) 使用 Loc() 函数报告给定行在反向关联数组键矩阵中的位置。
案例 3:与案例 2 一样,但我们愿意按感兴趣的列进行预排序(降序)。
在这种情况下,我们可以使用一个更简单、更有效的自引用公式:
If( Row() == 1,
1,
Lag( :Formula3 ) + (Lag( :Col1 ) != :Col1)
)
下面,我们看到第一个公式和接下来的两个公式之间的区别。 同样,只有第三个公式依赖于表格排序。

如果您想尝试一下,请运行下面的脚本。 它首先出现未排序,但在暂停一秒后,它按 col1 排序,此时第三个公式的结果将与第二个公式的结果匹配。
dt = New Table( "Example",
Add Rows( 20 ),
New Column( "Col1", <<SET values=""></SET>
干杯,
布雷迪