JSL 专家您好,
我很难在 1 列中找到第二个最大值、第三个最大值等值。
对于下面的列,我希望确定前 5 个最大值,并在单独的列中标记该值。
看来我只能找到第一个最大值,但找到第二个最大值、第三个最大值等有很多困难。
这个解决方案有标准公式吗?
谢谢
(100,
232、
343、
121、
100,
132、
100,
100,
100,
100,)
您可能使用的是旧版本的 JMP...当您手动输入我为该场景显示的公式时它是否有效? 这可能对您有用——我不记得何时将变量支持添加到列函数中…… 我认为对他们中的很多人来说可能是 JMP 14。
干杯,
布雷迪
多谢。
对于案例 1,我的 JMP 似乎在分布下没有排名,它只有图片中显示的前 6 个选项。
公式列 > 分布 > 排名(倒序)。
我认为案例 3 似乎是我当前问题的更好解决方案,感谢您的帮助。
你好,
这取决于你所说的“最大”是什么意思,以及你是否愿意对表格进行排序。 我将解决一些常见案例,并希望其中之一涵盖您的用例。
情况 1:“最大”表示原始值(包括重复值)在已排序数据集中的位置。
您可以为此使用内置转换。 右键单击感兴趣的列中的数据,然后选择新建公式列 > 分布 > 排名(倒序)。
单击创建的公式,我们有以下内容,无论表格是否排序,它都有效:
(Col Number( :Col1 ) - Col Rank( :Col1 )) + 1

情况 2:“最大”表示在排序的唯一值集中的位置(无重复)。 不愿意预先排序数据。
***注意:由于依赖于关联数组,此方法仅适用于涉及整数的数字数据。
我们可以使用复杂(且昂贵)的公式:
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>
干杯,
布雷迪