Comment calculer directement le nombre de conditions consécutives ?Par exemple, prenez "hauteur" comme exemple et comptez le nombre consécutif de "hauteur" dans la rangée supérieure à la "hauteur" dans la rangée précédente.
J'ai ajouté une colonne auxiliaire h pour déterminer si la "hauteur" de la ligne est supérieure à la "hauteur" de la ligne précédente, puis j'ai compté la "hauteur" consécutive de la ligne supérieure à la "hauteur" de la ligne précédente dans l'autre colonne. Si la "hauteur" est inférieure à la "hauteur" de la ligne précédente, il faut recalculer.

Comment faire ce calcul en une seule étape ?
J'ai essayé ceci, mais cela n'a pas fonctionné:
if(:height>Lag(:height,1),row()-Contains(:height[Index(1,Row())],:height<LAG></LAG>
- Merci!
Re : Comment calculer directement le nombre de conditions consécutives ?Salut tout le monde,
Cela m'a pris un certain temps, mais j'ai finalement compris comment ajouter une valeur à la ligne précédente si la condition était vraie.
Alors je veux partager ça avec vous.Je l'utilise pour baliser des valeurs séquentielles au sein de groupes.
Merci à tous.
Acclamations!
Si( Ligne() == 1,
.,
Si( :maître == Retard( :maître ),
Si( :roll - Décalage( :roll ) == 1,
:suite. roule v3[Ligne() - 1] = 1,
.
)
)
)
Re : Comment calculer directement le nombre de conditions consécutives ?Salut John,
Je vois l'erreur, mais cela ne fournit pas le calcul et les vérifications dont j'ai besoin.Mon dernier message montre une nouvelle table de données et une formule qui est proche.
Merci
Onjaï
Re : Comment calculer directement le nombre de conditions consécutives ?On dirait que le deuxième If avait un seul = pour l'affectation au lieu d'un == pour le test d'équivalence.
If( Row() == 1,
hCounter = 0,
If(
Lag( :name ) == :name,
If( :age > Lag( :age, 1 ),
Empty()
),
hCounter++, hCounter = 0
)
);
If( hCounter == 0,
.,
hCounter
);
Re : Comment calculer directement le nombre de conditions consécutives ?Salut,
Je joins une partie de mon ensemble de données réel.Je suis le nombre de :rolls qui sont séquentiels par :master.La formule est proche, mais j'en ai encore besoin pour définir la valeur de la première occurrence du roulement séquentiel si la différence est de 1.
Si( :maître == Retard( :maître ),
Si( Dif( :roll, 1 ) == 1,
Dif( :roll, 1 ),
.
),
.
)
Par exemple, je dois définir la valeur de :sequential roll sur 1 pour les lignes 8 et 11 car la différence = 1

Toute aide serait appréciée.
Re : Comment calculer directement le nombre de conditions consécutives ?Salut Jim,
Aucun problème.J'ai nommé la colonne pour montrer ce que je cherchais comme résultat final de la formule.
En regardant la colonne "desired by:name" pour Carol.
Des mesures de taille ont été prises pendant 3 années consécutives (âges 14, 15, 16).Mais la formule montre 4.
La différence d'âge, ligne par ligne, devrait être de 1. Si c'est quoi que ce soit <>1, alors il devrait être vide.
J'ai besoin que le décalage soit incrémenté de 1 jusqu'à ce que la valeur soit <>1. Ce qui devrait signaler si une année de mesure de hauteur a été manquée.

Re : Comment calculer directement le nombre de conditions consécutives ?Je ne comprends pas la règle pour la colonne "désiré par :nom".Vous avez une valeur manquante à la fin des lignes pour Alice, mais 2 lignes avec des valeurs manquantes pour Carol et Chris, puis une seule ligne de valeurs manquantes pour Clay.Je ne comprends pas
Re : Comment calculer directement le nombre de conditions consécutives ?Salut,
Trouvé l'erreur, mais la formule ne calcule toujours pas la colonne 10 comme souhaité.
La taille d'Alice a été mesurée pendant 5 années consécutives.J'ai besoin d'une colonne pour montrer quelles lignes sont consécutives.Clay n'a eu que 2 années consécutives de mesure de taille.Carol a eu 3 années consécutives de mesures de taille, mais la colonne 10 en indique 4.

Formule dans la colonne 10 :
If( Row() == 1,
hCounter = 0,
If( Lag( :name ) == :name,
If( :age > Lag( :age, 1 ),
hCounter
++),
hCounter = 0
)
);
If( hCounter == 0,
.,
hCounter
);
Re : Comment calculer directement le nombre de conditions consécutives ?Salut ,
Je ne suis pas tout à fait sûr de ce que je fais de mal, mais l'instruction If lance cette erreur.

pour ça:
If( Row() == 1,
hCounter = 0,
If(
Lag( :name ) = :name,
If( :age > Lag( :age, 1 ),
Empty()
),
hCounter++, hCounter = 0
)
);
If( hCounter == 0,
.,
hCounter
);
Re : Comment calculer directement le nombre de conditions consécutives ?Ajoutez simplement une instruction IF() dans la formule qui vérifie si le Lag(:Name) != :Name, et si ce n'est pas le cas, remettez votre compteur au point de départ.
Re : Comment calculer directement le nombre de conditions consécutives ?Salut,
J'ai un défi similaire.Cependant, je dois calculer le nombre de valeurs séquentielles (incrémentées de 1) dans une colonne.Je joins l'exemple BigClass pour illustrer.

J'ai utilisé votre formule pour calculer la colonne :h basée sur :age, mais je souhaite une formule qui commencera à la 1ère valeur d'une séquence et regroupée par :name.
Cela peut-il être réalisé avec une formule?
Salutations,
Onjaï
Re : Comment calculer directement le nombre de conditions consécutives ?Boucler est une bonne idée ici!
Merci Jim!Re : Comment calculer directement le nombre de conditions consécutives ?Le problème a une solution assez simple :
If( Row() == 1,
hCounter = 0,
If( :height > Lag( :height, 1 ),
hCounter++,
hCounter = 0
)
);
If( hCounter == 0,
.,
hCounter
);
Cette version produira des valeurs manquantes lorsqu'il y a 0 décalage qui répond à la condition, tout comme votre solution à 2 colonnes.Si vous voulez que la valeur résultante soit un zéro et non une valeur manquante, utilisez simplement :
If( Row() == 1,
hCounter = 0,
If( :height > Lag( :height, 1 ),
hCounter++,
hCounter = 0
)
);
hCounter;
Voici une comparaison complète des 2 méthodes
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << New Column( "h",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( If( Row() == 1, 0, :height > Lag( :height, 1 ) ) )
);
dt << New Column( "Two Columns Used",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( If( :h == 1, Row() - Contains( :h[Index( 1, Row() )], 0, -1 ) ) )
);
dt << New Column( "All in one",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If( Row() == 1,
hCounter = 0,
If( :height > Lag( :height, 1 ),
hCounter++,
hCounter = 0
)
);
If( hCounter == 0,
.,
hCounter
);
)
);