JSL技巧:在列表中查找唯一值參加活動的好處之一 JMP發現峰會作為開發人員,他們會聽到有這麼多不同應用的人提出的問題和建議 JMP 。一個JMP腳本語言(JSL)問題出現了三次,所以值得分享。問題是,“如何從列表中刪除重複的項目?”
也就是說,給出了清單 {“like”,“dislike”,“like”,“neutral”,“dislike”,“like”} 結果應該是 {“不喜歡”,“喜歡”,“中性”} (順序不重要)。
在JSL中可能有很多合理的方法可以做到這一點(歡迎其他想法),但我能想到的最簡單的方法是使用關聯數組 。關聯數組是鍵值對的集合,其中鍵是唯一的。如果使用相同的鍵添加多個鍵值對,則只保留其中一個(最後一個)。如果您不關心值,則關聯數組實際上是一組唯一鍵。
在JSL中,您可以通過多種方式創建關聯數組,但這裡唯一感興趣的是從列表中創建它。生成的關聯數組將列表值視為鍵,僅存儲唯一鍵。然後我們可以向關聯數組詢問其鍵列表。
答案 = { “喜歡” , “不喜歡” , “喜歡” , “中性” , “不喜歡” , “喜歡” } ;
答案組 = 關聯數組 ( 答案 ) ;
獨特答案 = 答案集 << 獲取密鑰 ;
結果:{“不喜歡”,“喜歡”,“中性”}
如果您尚未在JMP中發現關聯數組,請瀏覽JSL腳本索引中的文檔和示例。
現在,輪到你了:還有哪些方法可以從列表中獲得獨特的價值?我可以想到一個使用Summarize()函數...
James Cultra寫道:這種方法對矩陣更有效...詹姆斯·庫爾特拉中寫道:
此方法更適用於矩陣,因為關聯數組函數似乎對矩陣中的值進行舍入(因此唯一列表與矩陣中的實際值不匹配)
Xan Gregg寫道:如果你遍歷一個關聯ar ... Xan Gregg 中寫道:
如果遍歷關聯數組(使用First和Next消息),則按排序鍵的順序返回條目。如果值是唯一的,您可以將它們用作鍵,但如果沒有,我認為它需要顯式排序。你可以嘗試一下 JMP社區論壇關於後者的想法。
Eric Wittry寫道:如果我有一個鍵=>值對,我想... Eric Wittry 中寫道:
如果我有一個key => value對,並且我想對這些值進行排序並按順序返回鍵(*基於排序值),我將如何在JMP中執行此操作。謝謝Eric
Leighton Spadone寫道:// JSL Matrix函數用於重新... Leighton Spadone 中寫道:
// JSL Matrix函數用於將List減少為唯一值;
//具有重複值的列表;
answers = {“like”,“dislike”,“like”,“neutral”,“dislike”,“like”};
//將設計矩陣折疊為單行,第1次出現1次,重複次數為0次;
DesignMatrix = VMax(設計(答案,答案));
//結果:DesignMatrix = [1 1 0 1 0 0];
//子集唯一值的答案列表;
UniqueAnswers =答案[LOC(DesignMatrix)];
//結果:UniqueAnsers = {“dislike”,“like”,“neutral”};
Pmroz寫道:在列表中找到獨特的值... Pmroz 中寫道:
在列表中查找唯一值
在JMP討論論壇前一陣子。Â這是功能
我使用的,這是基於Xan顯示的技術:
/ *
函數名稱:get_unique_values
描述:在列表中查找唯一值
使用關聯數組
參數:
in_listÂ列出獲取唯一值
* /
Get_unique_values =功能 ( { in_list } , { 默認本地 } ,
Âtmp= [ => 0 ] ;
插入 ( tmp,in_list ) ;
tmp << get keys;
) ;
Guillaume寫道:另一種方法是使用循環語句和...紀堯姆中寫道:
另一種方法是使用循環語句和Loc()函數來查找唯一值
answers = {“like”,“dislike”,“like”,“neutral”,“dislike”,“like”};
unique_answers = List();
對於(i = 1,i <= Nitems(答案),i ++,
如果(Nrows(Loc(unique_answers,answers [i]))== 0,
InsertInto(unique_answers,answers [i])
);
);
Michael Crotty寫道:另一個內置的JSL功能......邁克爾克羅蒂中寫道:
另一個可以幫助解決這個問題的內置JSL函數是Design()函數:
answers = {“like”,“dislike”,“like”,“neutral”,“dislike”,“like”};
設計(答案,<<水平)[2]