Obtenir les lignes qui satisfont une condition dans une formule de colonneTous,
Probablement une question facile - mais vous cherchez de l'aide à ce sujet. Existe-t-il un moyen d'obtenir des lignes qui correspondent à une condition dans une formule de colonne ?
Dans l'exemple ci-dessous, on devrait pouvoir obtenir la somme groupée d'un groupe donné. Si je voulais ajouter une condition en plus de cela, disons on :height should be > 60 , comment puis-je y parvenir.
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << New Column("CondSum",Numeric,Continuous,Formula(Col Sum(:weight,:age)));En dehors d'une formule de colonne, je pense que c'est facile et que cela peut être réalisé. Cependant, je voudrais mettre en œuvre cela via une formule de colonne, si possible.
Re : Obtenir des lignes qui satisfont une condition dans une formule de colonneLa formule semble n'être évaluée que lorsque la colonne Age change.Cependant, la formule ci-dessous semble vous donner ce que vous voulez
myheight = :height;
myage = :age;
Sum( :weight[Current Data Table() << get rows where( :age == myage & :height >= myheight )] );
Re : Obtenir des lignes qui satisfont une condition dans une formule de colonneDonc je suppose que ça a quelque chose à voir avec
Le résultat est mis en cache en interne afin que plusieurs évaluations soient efficaces
Je ne peux pas dire avec certitude cependant.Si vous utilisez simplement une colonne intermédiaire, cela semble fonctionner correctement.
Names default to here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << New COlumn("Conditional", Formula(
myheight = :height;
:height >= myheight; // should always be 1
//:height >= .5*weight // this might be a better example
));
dt << New Column("CondSum",Numeric,Continuous,Formula(
Col Sum( :weight, :age, :Conditional );
));Re : Obtenir des lignes qui satisfont une condition dans une formule de colonneSalut, mettre une comparaison comme argument byVar est une bonne idée:
Col Sum( :weight, :age, :height >= 60 )
Je suis intéressé à mettre une comparaison dans l'argument byVar qui le compare à la ligne actuelle :
myheight = :height;
Col Sum( :weight, :age, :height >= myheight )
Cela ne fonctionne pas comme prévu : le calcul montre un ensemble de nombres confus, puis ils passent tous à "1" si je change la taille de quelqu'un.
Y a-t-il un moyen de faire cela?
(Juste pour un meilleur cadre de référence, dans ma table actuelle, j'essaie de compter les lignes où la date dans colA est supérieure à la datevalue dans colA et où la date dans colB est inférieure à la datevalue dans colB.)
Re : Obtenir des lignes qui satisfont une condition dans une formule de colonneSalut Uday,
Vous pouvez en fait simplement taper la condition comme argument suivant.
Col Sum( :weight, :age, :height > 60 )
Cela peut ne pas sembler correct au premier abord dans cet exemple de grande classe, car la somme est la même pour les enfants de 12 ans en dessous et au-dessus de 60 pouces.Il se trouve que ce sont les mêmes sommes.
Re : Obtenir des lignes qui satisfont une condition dans une formule de colonneAstuce très cool pour utiliser les conditions comme Par groupe choix 
Important à noter :
Avec le code suggéré, chaque condition
1) :hauteur <=60
2) :hauteur > 60)
obtient son propre résultat.
Il existe une autre variante où la condition est utilisée pour limiter l'agrégation à un sous-ensemble - et le résultat est écrit dans toutes les lignes du groupe respectif. Comme dans la dernière colonne de ce tableau :

Une option pour y arriver :
Utilisez Tables/Summary with a Data Filter (nouveau dans Jmp 17) et fusionnez les valeurs dans la table principale :
Voir plus...
D'autres approches (avec une variété de vitesses) sont discutées dans Comment utiliser la formule Col Maximum avec une condition "où".