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>
乾杯,
布雷迪