JSL: データテーブル列の一意の値を取得するこんにちは、
現在、データ テーブル列の一意の値を取得するために summary コマンドを使用していますが、私の考えでは、この単純なタスクには複雑すぎると思います。 データ テーブルの列またはベクトルに対して動作する、より単純なコマンドがあるはずだと思いますが、見つかりません。 私は正しいですか?
私の現在のコードは次のようになります。
// sample data set:
dt = New Table( "dt" );
dt:"Column 1" << setvalues( [1, 1, 2, 7, 7, 4, 5, 1, 5] );
// use summary to get unique values:
dt_sum = dt << summary( group( :Column 1 ), N, outputtablename( "dt_sum" ) );
unique_values = dt_sum:"Column 1" << getvalues;
ダーラ
Re: JSL: 一意の値を取得するこんにちは。配列内のキーを使用して、同じキーを持つ、別の JMP テーブル内の行を選択またはフィルタリングする方法は何でしょうか。 テーブルが 2 つあります。 そのうちの 1 つは、化学試験のサンプル ID をさまざまな要素設定 (温度、時間、研究番号など) にマッピングします。 配列内のサンプル ID を正常に取得できました。 (申し訳ありませんが、私はこれに関して全くの初心者です。)
smplID = Associative array(:sampleid) << Get Keys;
ここで、これらのキーを使用して 2 番目のテーブル (応答がある場所) の行を選択し、行の選択を反転して行を削除したいと思います。 おそらく以下の解決策があり、ここで説明されているように、から始めるのに適しています?
Summarize(dt, smpleID = by(:sampleid));
または多分このアプローチの方が望ましいですか?
dt << Summary (Group ( :sampleid ), Frequ( "None" ), Weight( "None" );
とにかく、私が本当に知りたいのは、データ分析をさらに進める前に、これらのアプローチのいずれかを使用して、データ テーブル内の不要な行を効果的にクレンジングする方法です。
編集: 議論され解決されましたここ。
Re: JSL: データテーブル列の一意の値を取得する要約してみてください...
Summarize ではさらに多くのことができます...スクリプトのドキュメントを参照してください。
欠点がいくつかあります。
- 要約された列が数値であっても、返されるリストには文字値が含まれます。
- 1 に関連して、数値の精度は列幅に基づいて切り捨てられます。
// sample data set:
dt = newtable("dt");
dt:"Column 1" << setvalues([1, 1, 2, 7, 7, 4, 5, 1, 5]); summarize(unique_values=by(Column 1));
show(unique_values)
しかし...欠点に対する回避策は次のとおりです。
summarize(unique_values=by(Column 1), unique_numeric_values=(max(Column 1)));
show(unique_values, unique_numeric_values)
Re: JSL: 一意の値を取得する次の例を調べてください。
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
values = dt:age << Get Values;
array = Associative Array( values );
array << Get Keys;
Re: JSL: 一意の値を取得するSummarize() を試してみて、返されたリストをループし、num() 関数を使用して文字列値を数値に戻すこともできます。
数式を使用する新しい列を作成することもできます
:変数 * 100
そして連想配列から出てきたデータを変換する
新しい列を作成し、値を文字に変換することができますRe: JSL: 一意の値を取得するこのすばらしい簡潔な解決策をありがとう@マーク・ベイリー 。
ほとんどの場合は機能しますが、次の場合には機能しません。
values = {0.111, 0.222, 0.333}; // This is actually something like: values = Column(SomeList[1]) << Get Keys
N Items(Associative Array(values)) // gives 1
JMPは連想配列を作成する際に小数点以下の桁を無視します。(JMP 12を使用)
連想配列を使用して、N 項目が 1 ではなく 3 を返すように修正するにはどうすればよいですか?
Re: JSL: 一意の値を取得するご協力ありがとうございます。要約は正常に動作しています。
ダーラRe: JSL: 一意の値を取得するまた:
unique values = Associative Array( col ) << Get Keys
Re: JSL: 一意の値を取得するデータをデータ テーブル形式で保持する場合は、Summarize が適しています。
@マーク・ベイリーが提案した連想配列は、リスト内で作業する場合に適しています。Re: JSL: データテーブル列の一意の値を取得する初心者(私)側の JMP ユーザー向けに概要ソリューションを提案します。
この例では、顧客注文リストから一意の完成品リストを取得します。テーブルへのリンクは設定せず、出力テーブルに名前を付けます。
元のデータテーブルで、「テーブル」->「概要」に移動します。

選択した列から「Finished Good」を右側のグループにドラッグします。
出力テーブルに名前を付けます (この場合は UniqueFG)。
元のデータ テーブルへのリンクのチェックを外します。
[アクション OK]をクリックします。

結果のデータ テーブルは、すべての一意の FG と行数のリストになります。
ソース スクリプトの編集をクリックします。
次のようになります。
Data Table( "Test" ) <<
Summary(
Group( :Finished Good ),
Freq( "None" ),
Weight( "None" ),
Link to original data table( 0 ),
output table name( "UniqueFG" )
)
そのコードをコピーします。
元のデータテーブルに新しいスクリプトを作成し、コードを貼り付けてください。コードを少し変更して柔軟性と拡張性を高め、以下に注釈を付けました。
//Creates a list of unique FG #s to feed to SAP to get unit weights and carton quantities
Names Default to Here(1);
dt = current data table();
dt <<
Summary(
Group( :Finished Good ), //this is the column from which you want unique values
Freq( "None" ),
Weight( "None" ),
Link to original data table( 0 ), //this turns off table linking
output table name( "UniqueFG" ) // this is the name of the new datatable
)
保存。
このアプローチやコード構造が適切かどうか、ぜひ教えてください。ありがとうございます!