取得唯一的列值並使用它們在不同的表中進行過濾/清理您好,例如,使用數組中的鍵來選擇或過濾具有相同鍵但位於不同 JMP 表中的行的方法是什麼。我有兩張桌子。其中一個將化學測試的樣本 ID 映射到不同的因素設定(溫度、時間、研究編號等)。我成功地獲取了數組中的樣本 ID。 (抱歉,我對此完全是新手。)
smplID = Associative array(:sampleid) << Get Keys;
現在我想使用這些鍵選擇第二個表中的行(我的響應所在),反轉行選擇並刪除行。到目前為止, 這個參考資料對我毫無幫助。也許下面的解決方案,正如這裡所描述的,更適合從?
Summarize(dt, smpleID = by(:sampleid));
或者也許這種方法更好?
dt << Summary (Group ( :sampleid ), Frequ( "None" ), Weight( "None" );
無論如何,我真正想知道的是,在進一步進行資料分析之前,如何使用這些方法中的任何一種來有效地清理資料表中不需要的行。我想我需要學習如何循環。
是的,我會盡可能通讀腳本指南。我只是無法確定它的優先順序。
大規模客製化回复:獲取唯一的列值並使用它們在不同的表中進行過濾/清理就是這樣。 我需要非常小心地處理表格。 否則我可能會放錯一些重複測量值。 因此,我試圖提前清理表格,因為這有助於保持概覽。
回复:獲取唯一的列值並使用它們在不同的表中進行過濾/清理這些方法對於那麼多的行來說會很快!
我想到了另一種解決方案,您可以先創建摘要表,然後將其加入要從中刪除找到的值的表。
使用 JMP Cars.jmp 和 Cars 1993.jmp 樣本數據作為示例。 Cars 1993 將是我們將使用 Model 列過濾 Cars 的數據。
1. 從 Cars 1993 中以模型為組創建匯總表
2. 使用以下設置將新的匯總表加入 Cars 表:

3. 從新的 Match Flag 列中,您可以看到兩個值:Both 和 Main。 Both 意味著可以從兩個數據集中找到模型
我認為您可以直接使用 Cars 1993 執行此操作,但您必須小心重複(Drop multiples With Table 可能會解決這個問題,不確定)。 同樣在這種情況下,您可能希望選擇要保留的列,因為會有重複項(至少在本例中)。

由於 JMP 可以完成大部分腳本編寫,因此這兩者也可以相當容易地編寫腳本。
回复:獲取唯一的列值並使用它們在不同的表中進行過濾/清理謝謝,這對我幫助很大! 我不確定“大量數據”的真正含義。 我打開的第一個表,今天包含大約 400 行,但隨著我們組織中實驗室信息管理系統 (LIMS) 的持續實施,這個數字肯定會增加。 我猜隨著時間的推移會有數千行,甚至可能多達一萬行。 我正在“清理”所有的第二個表,對我來說,不相關的樣本 ID 已經有大約 50 000 行。
截至目前,在實施您的解決方案後,我正在處理一系列示例 ID。 (雖然我覺得我的技能非常有限,但腳本編寫仍然感覺非常有價值,並且在找到解決方案時感到很滿足,即使它是從社區“撕掉”的。 所以再次非常感謝你。)
回复:獲取唯一的列值並使用它們在不同的表中進行過濾/清理要獲得唯一值,所有這些都是有效的方法,它們的速度將取決於您擁有的數據量。 需要注意的是,如果您想要獲取唯一的數值並使用 Summarize,則必須將它們轉換回數字(Summarize 將它們作為字符串返回)。
獲取唯一值的一些不同方法:
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
aa_uniq = Associative Array(dt:age) << get keys;
Summarize(dt, summarize_uniq = by(:age));
dt_summary = dt << Summary(Group(:age), Freq("None"), Weight("None"), private);
summary_uniq = Column(dt_summary, 1) << get as matrix;
Close(dt_summary, no save);
Show(aa_uniq, summarize_uniq, summary_uniq);要從數據表中選擇值,您可以使用 Contains 和 select where。 可能不需要反轉行選擇,因為您可以使用! (或 Not())來否定你從函數中得到的結果。 等待只是為了演示:
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
names_of_interest = {"KATIE", "LILLIE", "JOHN"};
wait(2);
dt << Select Where(Contains(names_of_interest, :name)) << Invert Row Selection << Hide and Exclude(1);// << clear select;
//Remove selections
wait(2);
dt << Clear Row States;
wait(2);
dt << Select Where(!Contains(names_of_interest, :name)) << Hide and Exclude(1);// << clear select;此外,如果您有大量數據,這可能不是執行此操作的最有效方法,但很可能是最簡單的方法,我會從它開始。