Seleccionar actores con múltiples criteriosMis datos tienen múltiples observaciones del mismo actor.Quiero encontrar Actores que satisfagan los criterios basados en múltiples columnas, pero que satisfagan diferentes criterios en diferentes observaciones del mismo Actor.
Ejemplo:

Quiero encontrar Actores que satisfagan:
Tamaño < 250
Y
Para la Competición A: Puntaje 1 > 10 Y Puntaje 2 > 10
Y
Para la Competición B: Puntaje 1 > 10 Y Puntaje 2 > 40
Y
Para la Competición C: Puntuación 3 > 50
Entonces, para la tabla anterior, debería decirme Actor B.
¡Gracias!
Re: Seleccionar Actores con Múltiples CriteriosHola,
Una forma de hacer esto es intersectar sucesivamente matrices asociativas, como se muestra a continuación.
Salud,
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: Seleccionar Actores con Múltiples Criterios¡Gracias por responder!
Sí, esa es la solución alternativa que he usado, pero tengo curiosidad por saber si hay una forma dentro de la misma tabla de datos, en lugar de dividirla en una nueva.
Es posible que no se pueda hacer en la estructura actual, pero no tengo la experiencia suficiente para saberlo.Re: Seleccionar Actores con Múltiples CriteriosMi solución sobre cómo hacer esta selección es remodelar la tabla de datos en una fila por actor y luego usar los criterios de selección requeridos teniendo todos los datos por actor disponibles.
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: Seleccionar Actores con Múltiples Criterios¡Gracias por su respuesta!
Desafortunadamente, eso no funciona, porque si digo "Competencia = A Y (otro criterio A) Y Competencia = B" se rompe, porque Competencia no puede = A y B. Pero si digo Competición = A Y (otro criterio A) O Competición = B Y (otro criterio
, me da Actores que lo hacen bien en CUALQUIERA de las Competiciones, pero no en TODAS.
Lo siento, es un poco difícil de explicar: el problema surge de las columnas Puntuación 1, 2 y 3 que contienen resultados de diferentes Competiciones. Una solución es dividir la tabla, diciendo 'Competencia A Puntaje 1', etc. como columnas, pero estoy buscando una solución dentro de la tabla de datos actual.Re: Seleccionar Actores con Múltiples CriteriosSeleccione Filas > Filtro de datos . Seleccione cada columna utilizada en el criterio y agréguelas una a la vez al filtro. A continuación, puede establecer el nivel deseado para cada una de estas variables. El filtro de datos afecta los estados de fila en la tabla de datos actual.
Ver Ayuda > Biblioteca de documentación de JMP > Uso de JMP guía para detalles y ejemplos.