Sélectionner des acteurs avec plusieurs critèresMes données ont plusieurs observations du même acteur.Je veux trouver des acteurs qui satisfont des critères basés sur plusieurs colonnes - mais qui satisferaient des critères différents dans différentes observations du même acteur.
Exemple:

Je veux trouver des acteurs qui satisfont :
Taille < 250
ET
Pour le Concours A : Note 1 > 10 ET Note 2 > 10
ET
Pour le concours B : Note 1 > 10 ET Note 2 > 40
ET
Pour le concours C : Note 3 > 50
Donc, pour le tableau ci-dessus, il devrait me dire Acteur B.
Merci!
Re : Sélectionner des acteurs avec plusieurs critèresSalut,
Une façon de le faire est d'intersecter successivement les tableaux associatifs, comme ci-dessous.
Salutations,
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 : Sélectionner des acteurs avec plusieurs critèresMerci d'avoir répondu!
Oui, c'est la solution de contournement que j'ai utilisée, mais je suis curieux de savoir s'il existe un moyen dans la même table de données, plutôt que de se diviser en une nouvelle.
Il est possible que cela ne puisse pas être fait dans la structure actuelle, mais je n'ai pas assez d'expérience pour le savoir.Re : Sélectionner des acteurs avec plusieurs critèresMa solution sur la façon de faire cette sélection consiste à remodeler le tableau de données en une ligne par acteur, puis à utiliser les critères de sélection requis ayant toutes les données par acteur 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 : Sélectionner des acteurs avec plusieurs critèresMerci pour votre réponse!
Malheureusement, cela ne fonctionne pas, car si je dis "Compétition = A ET (autres critères A) ET Compétition = B", cela casse, car la Compétition ne peut pas = A & B. Mais si je dis, Compétition = A ET (autre critère A) OU Compétition = B ET (autre critère
, cela me donne des Acteurs qui réussissent TOUTES les Compétitions, mais pas TOUTES.
Désolé, c'est un peu difficile à expliquer - le problème provient des colonnes Score 1, 2 et 3 contenant les résultats de différentes compétitions. Une solution consiste à diviser le tableau, en disant "Competition A Score 1", etc. comme colonnes, mais je cherche une solution dans le tableau de données actuel.Re : Sélectionner des acteurs avec plusieurs critèresSélectionner Lignes > Filtre de données . Sélectionnez chaque colonne utilisée dans le critère et ajoutez-les une par une au filtre. Vous pouvez ensuite définir le niveau souhaité pour chacune de ces variables. Le filtre de données affecte les états des lignes dans la table de données actuelle.
Voir Aide > Bibliothèque de documentation JMP > Utilisation de JMP guide pour plus de détails et d'exemples.