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