¿Cómo calcular directamente el número de condiciones consecutivas?Por ejemplo, tome "altura" como ejemplo y cuente el número consecutivo de "altura" en la fila mayor que la "altura" en la fila anterior.
Agregué una columna auxiliar h para determinar si la "altura" de la fila es mayor que la "altura" de la fila anterior, y luego conté la "altura" consecutiva de la fila mayor que la "altura" de la fila anterior en la otra columna. Si la "altura" es menor que la "altura" de la fila anterior, debe volver a calcular.

¿Cómo se puede hacer este cálculo en un solo paso?
Intenté esto, pero no funcionó:
if(:height>Lag(:height,1),row()-Contains(:height[Index(1,Row())],:height<LAG></LAG>
- ¡Gracias!
Re: ¿Cómo calcular directamente el número de condiciones consecutivas?Hola a todos,
Me tomó un tiempo, pero finalmente descubrí cómo agregar un valor a la fila anterior si la condición era verdadera.
Así que quiero compartir esto contigo.Estoy usando esto para etiquetar valores secuenciales dentro de grupos.
Gracias a todos.
¡Salud!
Si (Fila() == 1,
.,
If( :maestro == Lag( :maestro ),
If( :roll - Lag( :roll ) == 1,
:seg. tira v3[Fila() - 1] = 1,
.
)
)
)
Re: ¿Cómo calcular directamente el número de condiciones consecutivas?Hola, Juan,
Veo el error, pero esto no proporciona el cálculo y las comprobaciones que necesito.Mi última publicación muestra una nueva tabla de datos y una fórmula que está cerca.
Gracias
Onjai
Re: ¿Cómo calcular directamente el número de condiciones consecutivas?Parece que el segundo Si tuviera un solo = para la asignación en lugar de un == para la prueba de equivalencia.
If( Row() == 1,
hCounter = 0,
If(
Lag( :name ) == :name,
If( :age > Lag( :age, 1 ),
Empty()
),
hCounter++, hCounter = 0
)
);
If( hCounter == 0,
.,
hCounter
);
Re: ¿Cómo calcular directamente el número de condiciones consecutivas?Hola,
Adjunto una parte de mi conjunto de datos real.Estoy rastreando el número de :rolls que son secuenciales por :master.La fórmula está cerca, pero todavía la necesito para establecer el valor de la primera aparición de la tirada secuencial si la diferencia es 1.
If( :maestro == Lag( :maestro ),
Si( Dif( :rollo, 1 ) == 1,
Dif( :rollo, 1 ),
.
),
.
)
Por ejemplo, necesito establecer el valor de: rollo secuencial en 1 para las filas 8 y 11 porque la diferencia = 1

Cualquier ayuda sería apreciada.
Re: ¿Cómo calcular directamente el número de condiciones consecutivas?Hola Jim,
Ningún problema.Nombré la columna para mostrar lo que estaba buscando como resultado final de la fórmula.
Mirando la columna "deseado por: nombre" para Carol.
Se tomaron medidas de altura durante 3 años consecutivos (edades 14, 15, 16).Pero la fórmula muestra 4.
La diferencia de edad, fila a fila, debe ser 1. Si es algo <>1, entonces debe estar vacío.
Necesito que el Lag se incremente en 1 hasta que el valor sea <>1. Lo que debería indicar si se perdió un año en la medición de la altura.

Re: ¿Cómo calcular directamente el número de condiciones consecutivas?No entiendo la regla para la columna "deseado por: nombre".Tiene un valor faltante al final de las filas para Alice, pero 2 filas con valores faltantes para Carol y Chris, y luego regresa a solo 1 fila de valores faltantes para Clay.No comprendo
Re: ¿Cómo calcular directamente el número de condiciones consecutivas?Hola,
Encontró el error, pero la fórmula aún no calcula la columna 10 como se desea.
La altura de Alice se midió durante 5 años consecutivos.Necesito una columna para mostrar qué filas son consecutivas.Clay solo tuvo 2 años consecutivos de medición de altura.Carol tuvo 3 años consecutivos de medidas de estatura pero la Columna 10 muestra 4.

Fórmula en la columna 10:
If( Row() == 1,
hCounter = 0,
If( Lag( :name ) == :name,
If( :age > Lag( :age, 1 ),
hCounter
++),
hCounter = 0
)
);
If( hCounter == 0,
.,
hCounter
);
Re: ¿Cómo calcular directamente el número de condiciones consecutivas?Hola ,
No estoy muy seguro de lo que estoy haciendo mal, pero la declaración If está arrojando este error.

para esto:
If( Row() == 1,
hCounter = 0,
If(
Lag( :name ) = :name,
If( :age > Lag( :age, 1 ),
Empty()
),
hCounter++, hCounter = 0
)
);
If( hCounter == 0,
.,
hCounter
);
Re: ¿Cómo calcular directamente el número de condiciones consecutivas?Simplemente agregue una declaración IF() en la fórmula que verifique si el Lag(:Name) != :Name, y si no, luego vuelva a poner su contador en el punto de partida.
Re: ¿Cómo calcular directamente el número de condiciones consecutivas?Hola,
Tengo un desafío similar.Sin embargo, necesito calcular la cantidad de valores secuenciales (incrementados en 1) en una columna.Adjunto el ejemplo de BigClass para ilustrar.

Usé su fórmula para calcular la columna: h en función de: edad, pero deseo una fórmula que comience en el primer valor de una secuencia y se agrupe por: nombre.
¿Se puede lograr esto con una fórmula?
Saludos,
Onjai
Re: ¿Cómo calcular directamente el número de condiciones consecutivas?¡El bucle es una buena idea aquí!
¡Gracias Jim!Re: ¿Cómo calcular directamente el número de condiciones consecutivas?El problema tiene una solución bastante simple:
If( Row() == 1,
hCounter = 0,
If( :height > Lag( :height, 1 ),
hCounter++,
hCounter = 0
)
);
If( hCounter == 0,
.,
hCounter
);
Esta versión producirá valores faltantes cuando haya 0 retrasos que cumplan con la condición, al igual que su solución de 2 columnas.Si desea que el valor resultante sea cero y no un valor faltante, simplemente use:
If( Row() == 1,
hCounter = 0,
If( :height > Lag( :height, 1 ),
hCounter++,
hCounter = 0
)
);
hCounter;
Aquí hay una comparación completa de los 2 métodos.
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
);
)
);