リストから個別のエントリを取得しますか?リスト内の個別のエントリを取得する簡単な方法はありますか? (列をグループ化してその列内の個別のエントリを取得する表の要約に似ています)
結果は、重複するエントリが削除された、異なるエントリのみを含む縮小されたリストになるか、または異なるエントリの数を示す数値だけになります。
スクリプトを書く前に、簡単な方法/関数/数式があるかどうかを確認したいと思います。JMP ヘルプでは何も見つかりませんでした...
自動化とスクリプト基本的なデータ分析とモデリングデータのブレンドとクリーンアップデータの探索と視覚化Re: リストから個別のエントリを取得しますか?一つの方法は連想配列を使うことです
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"}
Re: リストから個別のエントリを取得しますか?すごい、うまくいきました!ジムさん、本当にありがとう!
Re: リストから個別のエントリを取得しますか?連想配列を介したアプローチは、スクリプト化、記憶、適用が簡単です。
多数の値のリストに対して個別の値を取得する場合は注意してください。
回避策:
値をテーブルに保存し、summary または上記の tables/summary のいずれかを使用します。
将来的には、JMP で一意の値を直接的かつ高速に計算する方法が登場するかもしれません。
私はこの希望をCol N カテゴリのサブトピックとして追加しました - そしてその他すべて...
ぜひこのアイデアを支持して投票してください:)
Re: リストから個別のエントリを取得しますか?実際、私の問題は、テーブル内の文字列のシーケンス内の一意のエントリを検出したいということです。ここに例を添付しました: 元々、列「シーケンス」(任意の区切り文字、ここでは区切り文字は「|」) があります。現在の実際の回避策は、これをリストに変換してから、連想配列を使用して Jim のソリューションを適用することです。ただし、一意の値を計算する簡単な方法があれば非常にありがたいです...
Re: リストから個別のエントリを取得しますか?ああ、そうそう、連想配列が痛いのはここです!
最後にエントリをカウントします。これが必要なのでしょうか、それとも中間ステップ (一意のエントリのリストを含む) も必要ですか?
一意の値を処理するための迅速かつ簡単な方法 - JMP 開発者がこのトピックを本当に役立つものとして認識してくれることを期待しましょう。次のリリースで実装されるよう...
Re: リストから個別のエントリを取得しますか?現在のアプリケーションでは、値自体ではなく、個別のエントリの数だけが必要です。ただし、リストを一意のエントリに減らすと便利な状況は他にもたくさんあると思います。
次のリリースで実装されることを期待しましょう:)
Re: リストから個別のエントリを取得しますか?速度に関しては、連想配列部分を単純なものに置き換えると中間ステップが速くなるかどうかを確認しました。
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;
);
)
)
)
100万行の場合、次のようになります。

つまり、連想配列の場合は 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]
Re: リストから個別のエントリを取得しますか?- 簡単
- 速い
そして:
- 貪欲ではない
1000万行でタイミングをチェックしようとしたところ、行き詰まってしまいました。
JMP がクラッシュし、最後の 60 秒間は次のようになります。

Re: リストから個別のエントリを取得しますか?... そこで、500 万行で試してみたところ、興味深い洞察が得られました。

テーブルを保存し、JMP を閉じてテーブルを再度読み込むと、メモリ使用量は値の計算に必要な量よりも大幅に少なくなります。
一見、連想配列が原因だと思いましたが、 mylist を使用した場合も同じことが起こります。
列の式がメモリを消費しないようにするにはどうすればよいですか?
TS-00177710
Re: リストから個別のエントリを取得しますか?ちなみに、これは私が少し前に書いた一意の値の関数です:
/*
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"}Re: リストから個別のエントリを取得しますか?シーケンスはどの程度複雑ですか (単一の文字だけですか?)? シーケンスがどのようなものになる可能性があるか事前にわかっていますか? また、シーケンスの長さはどのくらいですか?
エントリの数を計算するだけなら、N個のアイテムと連想配列と単語の組み合わせを使うことができる。
N Items(Associative Array(Words(:sequence, "|")))
部分的に関連JMPオブジェクト(列、リスト)から一意の値を高速に取得する方法を提供します。PythonのSetに似ている可能性があります。
Re: リストから個別のエントリを取得しますか?
@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 ? ?
Re: リストから個別のエントリを取得しますか?ありがとう、Holger。確かに、私が探していた関数のようです。JMP の標準関数として実装できれば素晴らしいと思います。
Re: リストから個別のエントリを取得しますか?Col N カテゴリはJMP19 に付属します。
ユニークなアイテムを入手するには、Kudos を待つという別の願いがあります。