如何使用一列對另一列進行“值排序”親愛的 JMP 社群:
是否可以使用一列的數值(整數)作為對另一列進行「值排序」的方式?
我有一個文字列,我想根據另一個包含整數的列對其進行排序。 例如,我有一個名為 :Text 的欄位和一個名為 :Level 的欄位。

預設情況下,JMP 會依下列方式對「值順序」列屬性進行排序:

我比較喜歡這樣排序:

在我的簡單範例中,其順序與 :Level 列的順序相同。 當然,我可以手動執行此操作,但在我的真實資料表中,我有一個文字列,其中包含幾十個條目,我不想手動執行此操作,而是使用列:Level 來設定“值順序”屬性:Text 列的。
有沒有辦法編寫腳本或透過 JMP 中的 GUI 來完成此操作?
謝謝!,
DS
進階統計建模自動化和腳本編寫大規模客製化回覆:如何使用一列對另一列進行“值排序”這裡的解決方案是使用關聯數組,這要求您擁有唯一的鍵。 因此,如果您有重複的級別,您擁有的一些文字將被“刪除”(我猜它們將按預設順序排序)。
回覆:如何使用一列對另一列進行“值排序”你好 !
我正在嘗試按數字日期列的值訂購一列(批次),但遇到一個問題,即同一天製造了兩個不同的批次。
例如,為什麼這不能正確排序?
dt = New Table("table",
Add Rows(10),
Compress File When Saved(1),
New Column("Text",
Character,
"Nominal",
Set Values({"A", "B", "C", "D", "E", "F", "AA", "BB", "CC", "DD", "EE", "FF"})
),
New Column("Level",
Numeric,
"Continuous",
Format("Best", 12),
Set Values([1, 2, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10])
)
);
文字列的順序如下:
文字等級
甲 1
乙2
d 3
F 4
AA 5
BB 6
CC 7
DD 8
EE 9
FF 10
C 2
乙3
而不是所需的:
文字等級
甲 1
乙2
C 2
d 3
乙3
F 4
AA 5
BB 6
CC 7
DD 8
EE 9
FF 10
C 2
回覆:如何使用一列對另一列進行“值排序”我同意, @jthi解決方案是最好的。有些人不喜歡 JSL。很多人不知道行順序等級。Excel 使用者(即將發布概括性評論)希望將行順序等級設為預設值。所以,這就是我回答你的精細討論問題的動機。
回覆:如何使用一列對另一列進行“值排序”您好,是的,我現在明白為什麼您需要取消選取自訂訂單複選框了。 這就說得通了。 jthi 這樣做的好處是,無論資料表的排序如何,它都會保持 :Text 列所需的值排序。回覆:如何使用一列對另一列進行“值排序”我在描述要做什麼時犯了一個錯誤。這是使用 Big Class 資料表的範例
- 我按身高t對資料表進行排序

- 然後,我進入“名稱”列的列屬性並選擇“行順序級別”,並且取消選擇“自訂順序”

- 然後我打開圖形生成器並將名稱列拖到 X 軸,可以看出,X 軸的順序是名稱的行順序

回覆:如何使用一列對另一列進行“值排序”你好@jthi ,
感謝您的回饋意見。 是的,這個 JSL 程式碼正是我所需要的,因為它可以處理 :Text 和 :Level 列的任何奇怪排列,然後適當地分配值順序。
我還沒有探索或使用關聯數組命令進行太多工作,但顯然我需要更多地研究它! 非常好,只有3行程式碼。
謝謝!,
DS
回覆:如何使用一列對另一列進行“值排序”你好@tx尼爾森,
感謝您的回饋意見。 不幸的是,這個解決方案不適用於 :Text 列。 如果我根據 :Level 列對錶進行排序,然後按照您建議的 :Text 列的值順序應用“行順序級別”,它仍然保留 :Text 列的 alpha 排序,這意味著 AA仍然在A 之後,依此類推。
另一個「問題」是它弄亂了原始資料表中的行,這些行目前按日期排序。 :Text 和 :Level 列可以分散在整個日期中,有時保持表格按日期排序會有所幫助。 這實際上並不是一個大問題,但我知道隨後訪問資料表的其他用戶不會喜歡它。
謝謝!,
DS
回覆:如何使用一列對另一列進行“值排序”你好@ron_horne ,
感謝您的回饋意見。 我熟悉在圖形產生器中製作類似帕累托圖的方法;用過很多次了,非常有幫助。 不幸的是,我正在對數據表進行許多其他評估,而不僅僅是數據可視化,因此擁有一個可移植且可擴展至具有數千行和數十個文本選項的表的解決方案將有所幫助。 我還沒有嘗試過其他兩種方法,但我會嘗試一下。
謝謝!,
DS
回覆:如何使用一列對另一列進行“值排序”兩個都@jthi和@ron_horne提供很好的解決方案。但如果你只是想要一種互動的方式來做到這一點,你所要做的就是
- 依您希望資料排序的資料列對資料表進行排序
- 進入要用於排序的列的值排序列屬性,然後選擇“行順序級別”

現在,當您使用指定行順序層級的列作為排序列時,它將使用該列的資料表中的順序作為顯示結果的順序。
回覆:如何使用一列對另一列進行“值排序”你好@SDF1
如果您需要的只是在圖形產生器中使用它,您可以按另一個軸對任何軸進行排序,如圖所示。您甚至可以更改排名的統計數據。如果您想要在其他分析或繪圖平台中進行測試或使用的順序,這對您沒有幫助。

在大多數情況下,我所做的是透過其他變數產生表格摘要並對其進行排序。從那裡我將類別直接複製並貼上到值排序中。 這是一個不是每個人都知道的技巧,但它確實有效。
榮恩
回覆:如何使用一列對另一列進行“值排序”我不知道 GUI 是否可行,但您可以透過幾個步驟編寫腳本:
- 首先在清單中獲得正確排序的文字列
- 將列屬性新增至帶有上一個清單的文字列
以下是一種可能的解決方案,至少應適用於當前範例(開啟日誌視窗以查看「偵錯」列印):
Names Default To Here(1);
dt = New Table("table",
Add Rows(10),
Compress File When Saved(1),
New Column("Text",
Character,
"Nominal",
Set Values({"A", "B", "C", "D", "E", "F", "AA", "BB", "CC", "DD"})
),
New Column("Level",
Numeric,
"Continuous",
Format("Best", 12),
Set Values([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
)
);
//get values from Level and Text into Associative Array
aA_level_text = AssociativeArray(Column(dt, "Level") << Get Values,Column(dt, "Text") << Get Values);
show(aA_level_text); //debug
ordered_level = aA_level_text << Get Values; //Get values (will be ordered by Level)
Show(ordered_level); //debug
Show(Column(dt, "Text") << Get Property("Value Ordering")); //debug
//Add Value Ordering Column Property to Text column
Eval(Eval Expr(
Column(dt, "Text") << Set Property("Value Ordering", Expr(ordered_level));
));
Show(Column(dt, "Text") << Get Property("Value Ordering")); //debug
dt << Clear Column Selection;
回覆:如何使用一列對另一列進行“價值排序”好的,我會嘗試一下
回覆:如何使用一列對另一列進行“值排序”使用 Ranking() 來「重新排序」可能適合您的情況
Names Default To Here(1);
dt = New Table("table",
Add Rows(10),
Compress File When Saved(1),
New Column("Text", Character, "Nominal", Set Values({"FF", "B", "C", "D", "E", "F", "AA", "BB", "CC", "DD", "EE", "A"})),
New Column("Level", Numeric, "Continuous", Format("Best", 12), Set Values([10, 2, 2, 3, 3, 4, 5, 6, 7, 8, 9, 1]))
);
m_text = Column(dt, "Text") << get values;
m_level = Column(dt, "Level") << get values;
orders = Ranking(m_level);
m_text[orders];
Show(Column(dt, "Text") << Get Property("Value Ordering")); //debug
Eval(Eval Expr(Column(dt, "Text") << Set Property("Value Ordering", Expr(m_text[orders]))));
Show(Column(dt, "Text") << Get Property("Value Ordering")); //debug回覆:如何使用一列對另一列進行“值排序”有效! 非常感謝你!
回覆:如何使用一列對另一列進行“值排序”奇怪的是,在彈出式選單中無法選擇“年齡”這一序數列。請問這是什麼原因?
回覆:如何使用一列對另一列進行“值排序”類似帖子,提供優雅的解決方案:
透過關聯數組按另一列設定值順序或值標籤
https://community.jmp.com/t5/Discussions/how-to-sort-x-axis-by-another-column-value/mp/442639#M69092 :
總結 + 排名索引
回覆:如何使用一列對另一列進行“值排序”在更高版本的 JMP 中,您可以這樣做,因為它們提供了「其他」選項,允許您選擇列。