Seleziona attori con criteri multipliI miei dati hanno più osservazioni dallo stesso attore.Voglio trovare attori che soddisfino criteri basati su più colonne, ma soddisfino criteri diversi in diverse osservazioni dello stesso attore.
Esempio:

Voglio trovare attori che soddisfino:
Taglia < 250
E
Per il Concorso A: Punteggio 1 > 10 E Punteggio 2 > 10
E
Per il Concorso B: Punteggio 1 > 10 E Punteggio 2 > 40
E
Per il Concorso C: Punteggio 3 > 50
Quindi per la tabella sopra dovrebbe dirmi Attore B.
Grazie!
Ri: selezionare attori con criteri multipliCiao,
Un modo per farlo è intersecare successivamente gli array associativi, come di seguito.
Saluti,
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));Ri: selezionare attori con criteri multipliGrazie per aver risposto!
Sì, questa è la soluzione che ho usato, ma sono curioso di sapere se c'è un modo all'interno della stessa tabella di dati, piuttosto che dividere in una nuova.
È possibile che non si possa fare nella struttura attuale, ma non ho abbastanza esperienza per saperlo.Ri: selezionare attori con criteri multipliLa mia soluzione su come eseguire questa selezione è rimodellare la tabella dei dati in una riga per attore e quindi utilizzare i criteri di selezione richiesti avendo tutti i dati per attore disponibili.
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>

Ri: selezionare attori con criteri multipliGrazie per la tua risposta!
Sfortunatamente, questo non funziona, perché se dico "Concorrenza = A E (altri criteri A) E Concorrenza = B" fallisce, perché la Concorrenza non può = A e B. Ma se dico Concorso = A AND (altro criterio A) OPPURE Concorso = B AND (altro criterio
, ottengo Attori che fanno bene QUALUNQUE dei Concorsi, ma non TUTTI.
Spiacenti, è un po' difficile da spiegare: il problema nasce dalle colonne Punteggio 1, 2 e 3 contenenti i risultati di diverse Competizioni. Una soluzione è dividere la tabella, dicendo "Competition A Score 1" ecc. Come colonne, ma sto cercando una soluzione all'interno della tabella di dati corrente.Ri: selezionare attori con criteri multipliSelezionare Righe > Filtro dati . Seleziona ogni colonna utilizzata nel criterio e aggiungile una alla volta al filtro. È quindi possibile impostare il livello desiderato per ciascuna di queste variabili. Il filtro dati influisce sugli stati delle righe nella tabella dati corrente.
Vedere Guida > Libreria della documentazione di JMP > Utilizzo di JMP guida per dettagli ed esempi.