Comment utiliser la formule Col Maximum avec une condition "où"Salut, j'ai un problème où je veux formuler une nouvelle colonne comme référence pour tous les autres pays. S'il y a plus de lignes pour le pays, je veux en prendre la valeur maximale comme référence. Voir l'exemple ci-dessous pour plus de précisions.
Le genre de données ressemble à ceci :
Pays Période de valeur
A 10 201301
A 30 201301
B 20 201301
C 50 201301
D 40 201301
Ce que je veux obtenir (avec la formule de la cellule) : Col Maximum (:value, :period, :country) où :pays == "A"
Production:
Pays Période de valeur Benchmark
A 10 201301 30
A 30 201301 30
B 20 201301 30
C 50 201301 30
D 40 201301 30
Comme vous pouvez le voir, je veux comparer la valeur maximale du seul pays A.
J'ai essayé Col Maximum (:value, :period, :country == "A") et il renverra "50"
Col Maximum (:value, :period, :country) et Col Maximum (:value, :period, :country == "A") renvoient tous les deux "50"
Je suis presque sûr qu'il existe une solution simple pour cela!
J'espère que vous pouvez aider!
Merci merci!
Re : Comment utiliser la formule Col Maximum avec une condition "où"Question intéressante - toujours en attente d'une réponse ?
Il existe un ensemble de messages avec des questions similaires sur la façon de restreindre le Col ... agrégation fonctions à un sous-ensemble spécifique.
(principalement : limitez-les au sous-ensemble de lignes non exclues)
https://community.jmp.com/t5/Discussions/Compute-Column-Mean-while-restricting-observations-used/mp/10377#M10055
https://community.jmp.com/t5/Discussions/JMP10-Col-Max-and-Col-Min-functions-returned-the-data-from/td-p/10555
https://community.jmp.com/t5/Discussions/Col-Functions-and-Row-States/td-p/351705
L'idée:
Si l'on s'intéresse à la taille moyenne, on peut agréger sur toutes les lignes - ou on peut agréger les entrées masculines et féminines séparément.
Pour le second, la solution est presque aussi simple que pour le premier : il suffit d'utiliser une variable GroupBy supplémentaire pour séparer les données souhaitées et indésirables.
Mais, ce dont un utilisateur a souvent besoin en plus : les valeurs doivent apparaître dans toutes les lignes respectives (c'est-à-dire également pour les femmes).
[L'exemple avec la colonne de référence dans le message d'origine illustre pourquoi un tel comportement pourrait avoir du sens.]
Avec GroupBy, il est facile d'obtenir les valeurs correctes - mais comment les répartir sur TOUTES les lignes.
S'il y a quelque chose comme une table de recherche derrière un Col ... agrégation fonction, la fonction utilise le même identifiant
1) pour diviser les lignes en différents groupes pour l'agrégation ("M" / "F") :
Judy est une femme, le poids dans la rangée de Judy doit être inclus dans poids moyen femme
2) comme index lors de la lecture d'une entrée de la table de recherche ("M" / "F") :
Judy est une femme, la nouvelle colonne doit contenir poids moyen femme dans la rangée de Judy
Ainsi, les hommes et les femmes obtiennent les mêmes valeurs, car l'identifiant est le même (moyenne1) - ou ils obtiennent des valeurs différentes car l'identifiant est différent (moyenne2).
donc :
Un utilisateur Jmp boîte utilisez la fonction GroupBy pour supprimer des valeurs du calcul via :
- calculer différentes valeurs pour différents sous-groupes
- vider les résultats indésirables
mais ensuite il obtient
- obtenir différentes valeurs pour différents sous-groupes
gratuitement - même s'il n'a pas commandé cette option (OK, le code raconte une autre histoire - mais réfléchissons à ce que l'utilisateur voulait) 
y a t-il commande en une ligne supprimer la femelle du calcul de la moyenne, mais écrire les valeurs dans les lignes respectives avec "femelle" ?
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << New Column("mean1", Formula(Col Mean(:weight, :age)));
dt << New Column("mean2", Formula(Col Mean(:weight, :age, :sex)));
dt << New Column("mean2", Formula(If(:sex=="M", Col Mean(:weight, :age, :sex))));
dtM = dt << subset( Rows( dt << get rows where( :sex== "M" ) ), selected columns( 0 ));
dtM << New Column("mean_M", Formula(Col Mean(:weight, :age)));
dt << Update(
With( dtM ),
Match Columns(:age = :age ),
Add Columns from Update Table( :mean_M ),
Replace Columns in Main Table( None )
);
Re : Comment utiliser la formule Col Maximum avec une condition "où"Merci.Re : Comment utiliser la formule Col Maximum avec une condition "où"Col Maximum() n'est viable que dans une formule, où un résultat de séparation par ligne est la sortie.Pour faire ce que vous voulez, utilisez la fonction Summarize().
Voir:
Aide==>Index des scripts==>Résumer
Re : Comment utiliser la formule Col Maximum avec une condition "où"Salut Mark,
essayé d'obtenir un poids maximum par âge ou par sexe, mais n'a produit qu'une seule valeur dans le script suivant.
par âges, il y avait 6 âges différents, pour chacun d'eux, j'aimerais calculer le poids maximum pour chaque âge.
Names Default To Here( 1 );
Clear Log();
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
max_weight_by_age = Col Max( :weight, :age );
max_weight_by_sex = Col Max( :weight, :sex );
Re : Comment utiliser la formule Col Maximum avec une condition "où"Je pourrais ajouter cette formule à une nouvelle colonne dans l'exemple de table de données Big Class :
Col Max( :weight, :age )
Re : Comment utiliser la formule Col Maximum avec une condition "où"Salut Mark,
Pouvez-vous donner un exemple sur la façon d'utiliser le lors de l'utilisation de col Max ?
Merci.Re : Comment utiliser la formule Col Maximum avec une condition "où"Voir Aide > Index des scripts > Fonctions :

Re : Comment utiliser la formule Col Maximum avec une condition "où"Merci Jim, je voulais dire résumer seulement. Comment je fais est (deux commandes jsl):
Résumez sur la colonne, créez un nouveau tableau avec des valeurs (min/max/ou toute autre statistique pour la colonne).
Ensuite, je mets à jour la table principale à l'aide de la table résumée en faisant correspondre les entrées de ligne.
J'étais juste curieux de savoir s'il existe une option conditionnelle dans la commande Max col() qui peut identifier des valeurs de colonne uniques et éliminer le besoin de cette étape supplémentaire. (éliminerait une table supplémentaire et 2 marches supplémentaires).
Apprécier ton aide.
Re : Comment utiliser la formule Col Maximum avec une condition "où"J'utilise généralement la fonction Summarize(), plutôt que Summary Platform, pour déterminer facilement les niveaux trouvés dans une colonne.Ensuite, à partir de là, il vous suffit de générer la formule dont vous avez besoin pour faire le travail.
Re : Comment utiliser la formule Col Maximum avec une condition "où"Supposons que la colonne pays ait plusieurs noms et que je ne connaisse pas toutes les valeurs possibles. Comment cette requête peut-elle être modifiée pour le faire.
Je peux le faire en créant un tableau récapitulatif, puis en mettant à jour le tableau, mais cela semble être une méthode inefficace, j'étais curieux de savoir si cela pouvait être fait en une seule étape comme celle-ci.
Merci d'avance.
Re : Comment utiliser la formule Col Maximum avec une condition "où"Désolé pour la réponse tardive! Merci pour la solution !Re : Comment utiliser la formule Col Maximum avec une condition "où"Compte tenu de la façon dont vous avez exprimé vos besoins, en supposant que vous savez quel est le pays qui a les entrées multiples.
dt = Current Data Table();
rowperiod = :Period[Row()];
Max(
:Value[dt << get rows where(
:Country == "A" & :period == rowperiod
)]
);