複数の配列の場合の get rows where と同等こんにちは、
これは非常に基本的な質問のように思えますが、適切な答えが見つからないため、間違った検索用語を使用している可能性があります。
最初は文字列(ファイルパス)のリストを作成するだけだったスクリプトがあり、それらを問題なく順番に使用できました。 範囲が拡大したため、同時に作成された同じ長さの他の 2 つのリストの条件に基づいてフィルタリングを行う必要があります。 私の脳は依然としてデータ テーブルで機能しており、データ テーブル (または SQL) 形式であれば、これを行うのは簡単です。 非表示のデータ テーブルを作成することは実行可能な選択肢かもしれませんが、さまざまなデータ構造を操作し、別の dt を使用するようにコードを変更するのは煩雑に見えることをよりよく理解したいと考えています。
これは連想配列のアプリケーションのように見えますが、配列を正しく作成するのに苦労しており、スクリプト ガイドとスクリプト インデックスが表示されません。 誰かが私に正しい方向を示してくれたり、私が今やろうとしていることにとってより意味のあるデータ構造を提案してもらえますか? それとも、実際には隠しテーブルが最良の選択肢なのでしょうか?
この例では、3 つの個別のリストがあることにも注意してください。 現在のアプリケーションでは、各リストは List_A[1] が List_B[1] などに対応する独自のリストに含まれていますが、親リストを反復処理しています。
ありがとう!
Names Default To Here( 1 );
//example data is in dt, my data isn't
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
//this is more or less the structure of the data that I have
sex_list = dt:sex << get values;
height_list = dt:height << get values;
weight_list = dt:weight << get values;
//this is what I would do if I had the data in a dt
output = dt:weight[dt << get rows where(and(:age == 13, :sex == "M"))];
show(output);
//how to do this with the data in a structure with no dt? what structure would be appropriate?
自動化とスクリプト作成Re: 複数の配列の行を取得するのと同等JMP データテーブルはクエリが簡単で、(クエリによっては) かなり高速なので、おそらく単に使用するでしょう。プライベートまたは非表示のデータテーブル。どうしても連想配列を使いたい場合は、年齢 == 13、性別 == "M" を示す "13_M" など、かなりの数の一意のキーを作成する必要があると思います。
Re: 複数の配列の行を取得するのと同等リストまたは行列内の項目を検索する loc() 関数。 連想配列を使用して、インデックスの複数のリストを交差させます。 Re: 2 つのリスト (珍しい要素) を簡単に比較する方法はありますか?
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
name_list = dt:name << get values;// a list
sex_list = dt:sex << get values;// a list
age_list = dt:age << get values;// a matrix
weight_list = dt:weight << get values;
age_rows = Loc( 13 <= age_list <= 14 );
sex_rows = Loc( sex_list, "M" );
// intersection of those https://community.jmp.com/t5/Discussions/Quick-way-to-compare-two-lists-and-identify-the-uncommon/m-p/5811
intersect = Associative Array( age_rows );// uses two associative arrays
intersect << intersect( Associative Array( sex_rows ) ); // perform the intersection
intersect = intersect << getkeys; // get the answers
For Each( {key}, intersect, Write( Eval Insert( "\!n^name_list[key]^ \!t^age_list[key]^ \!t^sex_list[key]^ \!t^weight_list[key]^" ) ) );
/*
JOHN 13 M 98
JOE 13 M 105
MICHAEL 13 M 95
DAVID 13 M 79
FREDERICK 14 M 93
ALFRED 14 M 99
HENRY 14 M 119
LEWIS 14 M 92
EDWARD 14 M 112
CHRIS 14 M 99
JEFFREY 14 M 113
*/Re: 複数の配列の行を取得するのと同等クレイジ、ジャーモ、ありがとう! したがって、配列を使用することは間違いなく可能ですが、いくつかの手順が必要であるため、JSLはこのような場合に非表示/プライベートテーブルを使用するように設計されているようです(それが、私が明確な答えを見つけられなかった理由です)。