Wählen Sie Akteure mit mehreren Kriterien ausMeine Daten enthalten mehrere Beobachtungen desselben Akteurs.Ich möchte Akteure finden, die Kriterien basierend auf mehreren Spalten erfüllen - aber in verschiedenen Beobachtungen desselben Akteurs unterschiedliche Kriterien erfüllen würden.
Beispiel:

Ich möchte Schauspieler finden, die Folgendes erfüllen:
Größe < 250
UND
Für Wettbewerb A: Punktzahl 1 > 10 UND Punktzahl 2 > 10
UND
Für Wettbewerb B: Punktzahl 1 > 10 UND Punktzahl 2 > 40
UND
Für Wettbewerb C: Punktzahl 3 > 50
Also für die obige Tabelle sollte es mir Schauspieler B sagen.
Vielen Dank!
Re: Akteure mit mehreren Kriterien auswählenHi,
Eine Möglichkeit, dies zu tun, besteht darin, assoziative Arrays wie unten sukzessive zu schneiden.
Beifall,
Brady
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: Akteure mit mehreren Kriterien auswählenDanke für die Antwort!
Ja, das ist die Problemumgehung, die ich verwendet habe, aber ich bin neugierig, ob es einen Weg innerhalb derselben Datentabelle gibt, anstatt in eine neue aufzuteilen.
Es ist möglich, dass dies in der aktuellen Struktur nicht möglich ist, aber ich bin nicht erfahren genug, um das zu wissen.Re: Akteure mit mehreren Kriterien auswählenMeine Lösung für diese Auswahl besteht darin, die Datentabelle in eine Zeile pro Akteur umzugestalten und dann die erforderlichen Auswahlkriterien zu verwenden, wobei alle Daten pro Akteur verfügbar sind.
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: Akteure mit mehreren Kriterien auswählenDanke für deine Antwort!
Das geht leider nicht, denn wenn ich sage "Wettbewerb = A UND (andere A-Kriterien) UND Wettbewerb = B" bricht es, weil Wettbewerb nicht = A & B kann. Aber wenn ich sage, Wettbewerb = A UND (andere A-Kriterien) ODER Wettbewerb = B UND (andere B-Kriterien), erhalte ich Schauspieler, die in JEDEM Wettbewerb gut abschneiden, aber nicht in ALLEN.
Tut mir leid, es ist ein bisschen schwer zu erklären - das Problem ergibt sich aus den Spalten Score 1, 2 und 3, die Ergebnisse aus verschiedenen Wettbewerben enthalten. Eine Problemumgehung besteht darin, die Tabelle aufzuteilen und als Spalten „Competition A Score 1“ usw. anzugeben, aber ich suche nach einer Lösung innerhalb der aktuellen Datentabelle.Re: Akteure mit mehreren Kriterien auswählenWählen Zeilen > Datenfilter . Wählen Sie jede im Kriterium verwendete Spalte aus und fügen Sie sie einzeln dem Filter hinzu. Sie können dann für jede dieser Variablen die gewünschte Stufe einstellen. Der Datenfilter wirkt sich auf die Zeilenstatus in der aktuellen Datentabelle aus.
Sehen Hilfe > JMP-Dokumentationsbibliothek > JMP verwenden Leitfaden für Details und Beispiele.