Comment utiliser max parmi plusieurs colonnes avec la condition "get rows where"Cela semble être une question facile mais j'ai du mal à la résoudre...
J'ai ce genre de table de données :

Cela va jusqu'à 64 qui est le paramètre "dim" dans mon script.
Je recherche le maximum et le minimum de tous les median_range_mm 1, 2 , 3 ... jusqu'à 64. Mais je ne veux pas que JMP regarde les lignes où target_status est différent de 5 ou 9.
Comme vous pouvez le voir, lorsque le statut cible est 10, il dépasse 39996.
C'est plus facile à comprendre avec mon code :
maxValueVar = 0 ;
maxValue = Max( :median_range_mm [dt << get rows where( :target_status == 5 | :target_status == 9 ) ] );
minValue = Min( :median_range_mm[dt << get rows where( :target_status == 5 | :target_status == 9 )] );
For( p = 2, p <= dim, p++,
name = Column(dt, "target_status " || Char( p ));
nom = Column(dt, "median_range_mm " || Char( p )); // browse every columns of median_range_mm
MaxValueVar = Col Max( nom [dt << get rows where ( name == 5 | name == 9 )] );
If(
maxValueVar > maxValue, maxValue = maxValueVar,
minValueVar < minValue, minValue = minValueVar
);
);
Notez que cela fonctionne pour la première colonne que je n'ai pas paramétrée. Aussi ça marche si je commente
[dt << get rows where ( name == 5 | name == 9 )]
Une idée du fonctionnement de "get rows where" ou "column max()" ?
Merci
Re : Comment utiliser max parmi plusieurs colonnes avec la condition "obtenir des lignes où"@txnelson
@uday_guntupalli
Merci pour vos réponses. Peut-être n'ai-je pas été assez clair dans l'énoncé de mon problème.
Le principal point bloquant est que je peux obtenir le Maximum de la colonne "median_range_mm" avec le filtre sur la colonne "target_status" avec le code :
maxValue = Max( :median_range_mm [dt << get rows where( :target_status == 5 | :target_status == 9 ) ] ); // ==> OK
minValue = Min( :median_range_mm[dt << get rows where( :target_status == 5 | :target_status == 9 )] ); // ==> OK
Mais une fois que j'ai itéré sur les colonnes :
For( p = 2, p <= dim, p++,
name = Column("target_status " || Char( p ));
nom = Column("median_range_mm " || Char( p ));
MaxValueVar = Max( nom [dt << get rows where ( name == 5 | name == 9 )] );</CODE></PRE><P>MaxValueVar et MinValueVar n'obtiennent aucune donnée "." (Je devine que c'est<SPAN> caractère de valeur manquante pour les colonnes numériques)</SPAN> .</P><P>Dans la fenêtre de débogage, je pense que le type de "nom" et de "nom" est important. Ce n'est pas un type de colonne...</P><P> </P><P>L'idée est que "name" est la colonne "target_status 2" puis 3 puis 4... avec itération sur p.</P><P>Même idée avec "nom" qui est la colonne "median_range_mm 2" puis 3 puis 4....</P><P>Donc pour p = 2, je cherche le maximum de median_range_mm 2 où "target_status 2" == 5 ou 9.</P><P>Alors p = 3 ... jusqu'à 64</P><P> </P><P>Enfin, si "maximum of median_range_3" > "maximum of median_range_2" alors "maximum of median_range_3 prend la valeur maxValue :</P><PRE><CODE class=" language-jsl">If(
MaxValueVar > maxValue, maxValue = MaxValueVar,
MinValueVar < minValue, minValue = MinValueVar
);
Merci d'avoir lu,
Re : Comment utiliser max parmi plusieurs colonnes avec la condition "obtenir des lignes où"Je pense que cela pourrait être une solution pour ce que vous essayez de faire
min_value = Col Quantile( If( Row() <=64 & ( :target_status == 5 |
:target_status == 9 ),
:median_range_mm
,
.
), .5<BR />);Re : Comment utiliser max parmi plusieurs colonnes avec la condition "obtenir des lignes où"@ Rob128 ,
J'ai du mal à comprendre exactement ce que vous voulez ?Laissez-moi essayer de vous montrer quelques étapes :
Ce qui suit devrait vous donner toutes les lignes, où target_status est 5 ou 9, comme vous l'avez essayé.
SR = dt << Select Where(:target_status ==5 | :target_status ==9) << get selected rows;
Maintenant, vous avez la liste des lignes où votre condition est remplie, la prochaine chose que vous voulez si je comprends votre question est la valeur min et maximum ?
MedianValues = dt:median_range_mm << Get Values;
MedianValuesDes = MedianValues[SR]; // Filter out and get only the rows with target status of 5 or 9
MaxVal = Max(MedianValuesDes );
MinVal = Min(MedianValuesDes );
Je suis presque sûr qu'il existe de nombreuses autres façons de le faire, mais j'essaie de le décomposer en étapes afin que vous puissiez suivre la pensée. Si ce n'est pas ce que vous recherchez, pouvez-vous expliquer un peu plus clairement ce que vous recherchez s'il vous plaît ?