從清單中取得不同的條目?有沒有簡單的方法來取得清單中的不同條目? (類似於透過對列進行分組以獲得該列中不同條目的表摘要)
結果可以是僅包含不同條目(刪除重複條目)的簡化列表,也可以是僅包含不同條目數量的數字。
在編寫腳本之前,我想檢查是否有一個簡單的方法/函數/公式。在 JMP 幫助中找不到任何內容...
自動化和腳本編寫基礎資料分析與建模資料混合與清理數據探索和視覺化回覆:從清單中取得不同的條目?一種方法是使用關聯數組
names default to here(1);
// Create a list
dt=
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
Open( "$SAMPLE_DATA/Big Class.jmp" );
genderList = :sex << get values;
// Get the distinct list of values
distinctList = (associative array(genderList))<<GET keys=""></GET>
{"F", "M"}
回覆:從清單中取得不同的條目?太棒了,這有效!非常感謝吉姆!
回覆:從清單中取得不同的條目?通過關聯數組的方法很容易編寫/記住/應用。
如果您想取得 mio 值清單的不同值,請小心。
解決方法:
將值儲存到表中並使用摘要或上面提到的表/摘要。
也許,將來,JMP 中會有一種直接/快速的方法來計算唯一值?
我將這個希望作為子主題添加到Col N 類別 - 以及所有其他類別...
請支持這個想法並投票:)
回覆:從清單中取得不同的條目?實際上,我的問題是我想檢測表中字串序列中的唯一條目。這裡我附了一個例子:最初我有“序列”列(任意分隔符,這裡分隔符是“|”。我現在的實際解決方法是將其轉換為列表,然後將吉姆的解決方案與關聯數組一起應用。
回覆:從清單中取得不同的條目?哦,是的,這就是關聯數組的痛處!
最後計算條目數。這是您所需要的 - 還是您還需要中間步驟(包含唯一條目清單)?
處理唯一值的快速而簡單的方法 - 希望 JMP 開發人員認識到該主題確實有用。這樣它就會在下一個版本中實現......
回覆:從清單中取得不同的條目?對於我目前的應用程序,我只需要不同條目的數量,而不是值本身。但我認為在更多情況下,將清單縮減為其唯一條目可能會有所幫助。
是的,我們希望在下一個版本中實現:)
回覆:從清單中取得不同的條目?關於速度,我只是檢查如果我用簡單的替換關聯數組部分,中間步驟是否會變得更快
If(not(contains(), insert into(mylist ... - 沒有好處。
New Column( "unique entries",
Expression,
Formula(
Local( {nr = N Rows( Current Data Table() )},
If( Row() == nr,
Caption( "done" )
);
Match( :variant,
1, Associative Array( :list from sequence[Empty()] ) << get keys,
2,
myList = {};
For Each( {entry}, :list from sequence,
If( !Contains( myList, entry ),
Insert Into( myList, entry )
)
);
myList;
);
)
)
)
對於 1mio 行,我得到:

因此關聯數組為 1:0。還有更好的主意嗎?
[Another 2+2 seconds are needed for the columns :list from sequence and :N 個獨特的條目。
So, no real benefit to get into the ms regime for the intermediate step]
回覆:從清單中取得不同的條目?- 簡單的
- 快速地
和:
- 不貪心
我只是嘗試用 10 mio 行檢查時間 - 但被卡住了。
JMP 崩潰,最後 60 秒如下所示:

回覆:從清單中取得不同的條目?……所以,我只是嘗試了 5 mio 行 - 並得到了一個有趣的見解:

當我儲存表格、關閉 JMP 並再次載入表格時,記憶體使用量明顯少於計算值所需的記憶體!
乍一看,我認為這是由於關聯數組造成的,但當我使用mylist時也會發生相同的事情。
如何防止列公式吞噬我的記憶?
TS-00177710
回覆:從清單中取得不同的條目?FWIW 這是我不久前寫的一個唯一值函數:
/*
Function Name: get_unique_values
Description: Find the unique values in a list. Uses an associative array
Arguments:
in_list List to get unique values for
*/
Get_unique_values = Function( {in_list},
{Default Local},
tmp = [=> 0];
Insert Into( tmp, in_list );
tmp << get keys;
);
呼叫範例:
a = {1, 1, 1, 2, 3, 3, 3};
b = get_unique_values(a);
print(b);
c = {"Hello", "World", "John", "Ed", "John", "World"};
d = get_unique_values(c);
print(d);
輸出:
{1, 2, 3}
{"Ed", "Hello", "John", "World"}回覆:從清單中取得不同的條目?您的序列有多複雜(它們只是單個字母嗎?)?您事先知道它們可能是什麼嗎?該序列可以有多長?
為了僅計算條目數量,您可以使用 N Items + Associative Array 和 Words 的組合
N Items(Associative Array(Words(:sequence, "|")))
部分相關提供從 JMP 物件(列、列表)取得唯一值的快速方法,可能類似於 Python 的 Set
回覆:從清單中取得不同的條目?
@jthi wrote:N Items(Associative Array(Words(:sequence, "|")))
也許我錯了,但這個建議看起來與@katharina_l中發布的內容非常相似
https://community.jmp.com/t5/Discussions/Get-distinct-entries-from-a-list/mp/820530/highlight/true#M99918 ? ?
回覆:從清單中取得不同的條目?謝謝霍爾格,是的,看起來絕對像我正在尋找的功能。如果它可以作為 JMP 中的標準功能實現,那就太好了。
回覆:從清單中取得不同的條目?Col N 類別將隨 JMP19 一起提供。
對於獲得獨特物品,有一個單獨的願望 - 等待榮譽。