複数の基準でアクターを選択する私のデータには、同じアクターからの複数の観測があります。複数の列に基づいて基準を満たすアクタを見つけたいのですが、同じアクタの異なる観察で異なる基準を満たすことになります。
例:

以下を満たすアクタを見つけたい:
サイズ < 250
と
競技 A の場合: スコア 1 > 10 かつ スコア 2 > 10
と
競技 B の場合: スコア 1 > 10 AND スコア 2 > 40
と
コンペティション C : スコア 3 > 50
したがって、上記のテーブルでは、アクター B が示されます。
ありがとう!
Re: 複数の基準でアクターを選択するやあ、
これを行う 1 つの方法は、以下のように連想配列を連続して交差させることです。
乾杯、
ブレイディ
Names Default To Here( 1 );
dt = New Table( "Example",
Add Rows( 9 ),
New Column( "Actor", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 2, 3, 1, 2, 3, 1, 2, 3] ) ),
New Column( "Competition", Character, "Nominal", Set Values( {"A", "A", "A", "B", "B", "B", "C", "C", "C"} ) ),
New Column( "Score 1", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [12, 13, 20, 25, 15, 16, 16, 15, 12] ) ),
New Column( "Score 2", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [12, 46, 45, 25, 48, 34, 59, 45, 56] ) ),
New Column( "Score 3", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [45, 50, 55, 60, 45, 80, 52, 61, 43] ) ),
New Column( "Size", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [100, 200, 300, 100, 200, 300, 100, 200, 300] ) )
);
critExprList = {
Expr( :competition == "A" & :Score1 > 10 & :Score 2 > 10),
Expr( :competition == "B" & :Score1 > 10 & :Score 2 > 40),
Expr( :competition == "C" & :Score3 > 50)
};
ansAA = Associative Array( dt:actor[dt << get rows where( :size < 250 )] );
For( i = 1, i <= N Items( critExprList ), i++,
Eval(
Substitute( Expr( curAA = Associative Array( dt:actor[dt << get rows where( _CLAUSE_ )] ) ), Expr( _CLAUSE_ ), eval( critExprList[i] ) )
);
ansAA << Intersect (curAA)
);
dt << select where(contains(ansAA << get keys, :actor));Re: 複数の基準でアクターを選択する返信ありがとうございます。
はい、それが私が使用した回避策ですが、新しいテーブルに分割するのではなく、同じデータテーブル内に方法があるかどうか知りたいです。
現在の構造ではできない可能性がありますが、私は十分な経験がありません。Re: 複数の基準でアクターを選択するこの選択を行う方法に関する私の解決策は、データ テーブルをアクターごとに 1 つの行に再形成し、アクターごとにすべてのデータを利用できる必要な選択基準を使用することです。
Names Default To Here( 1 );
dt = New Table( "Example",
Add Rows( 9 ),
New Column( "Actor", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 2, 3, 1, 2, 3, 1, 2, 3] ) ),
New Column( "Competition", Character, "Nominal", Set Values( {"A", "A", "A", "B", "B", "B", "C", "C", "C"} ) ),
New Column( "Score 1", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [12, 13, 20, 25, 15, 16, 16, 15, 12] ) ),
New Column( "Score 2", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [12, 46, 45, 25, 48, 34, 59, 45, 56] ) ),
New Column( "Score 3", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [45, 50, 55, 60, 45, 80, 52, 61, 43] ) ),
New Column( "Size", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [100, 200, 300, 100, 200, 300, 100, 200, 300] ) )
);
dtSplit = dt << Split(
Split By( :Competition ),
Split( :Score 1, :Score 2, :Score 3, :Size ),
Group( :Actor ),
Sort by Column Property
);
dtSplit << select where( (:Size A < 250 & :Score 1 A > 10 & :Score 2 A > 10 &
:Score 1 B > 10 & :Score 2 B > 40 & :Score 3 C > 50) |
(:Size B < 250 & :Score 1 A > 10 & :Score 2 A > 10 &
:Score 1 B > 10 & :Score 2 B > 40 & :Score 3 C > 50) |
(:Size C < 250 & :Score 1 A > 10 & :Score 2 A > 10 &
:Score 1 B > 10 & :Score 2 B > 40 & :Score 3 C > 50)
);
If(N Rows(dtSplit << get selected rows) > 0, Dialog("The Actor(s) is/are " || char( dtSplit<<GET selected="" rows=""></GET>

Re: 複数の基準でアクターを選択するお返事をありがとうございます!
残念ながら、それは機能しません。なぜなら、「競合 = A AND (他の A 基準) AND 競合 = B」と言うと、競合 = A & B ができないため、壊れてしまうからです。 しかし、競争 = A AND (他の A 基準) OR 競争 = B AND (他の B 基準) と言うと、すべての競技ではなく、いずれかの競技でうまくいくアクタが得られます。
申し訳ありませんが、説明するのが少し難しいです。問題は、異なる競技会の結果を含むスコア 1、2、および 3 列から発生します。 回避策の 1 つは、列として「Competition A Score 1」などと言ってテーブルを分割することですが、現在のデータ テーブル内で解決策を探しています。Re: 複数の基準でアクターを選択する選択する行 > データ フィルタ. 基準で使用される各列を選択し、一度に 1 つずつフィルターに追加します。 次に、これらの変数ごとに目的のレベルを設定できます。 データ フィルターは、現在のデータ テーブルの行の状態に影響します。
見るヘルプ > JMP ドキュメント ライブラリ > JMP の使用詳細と例のガイド。