Fórmula: cómo encontrar la fila más reciente (según las condiciones) y recuperar el valor de una columna diferenteHola, necesito ayuda para poner una fórmula para encontrar una fila más reciente en función de las condiciones y recuperar un valor de columna diferente/realizar cálculos entre dos parámetros de fila (DateTime).
La siguiente tabla de datos (también adjunta) tiene: columnas Activo, Fecha y hora, Discreto y Acción.
Los datos se ordenan según el activo primero y luego la fecha y hora (ascendente)
También hay una variable de tabla days_threshold = 4.
Action(Desired) es la forma deseada de Action en la que la fórmula actual

necesita ser modificado.
Cualquier fila que obtenga un Discreto = 1 (que normalmente se determina mediante reglas de fórmula que se omiten aquí y en su lugar se proporcionan valores de muestra), Acción necesita comenzar a buscar sus propias filas anteriores (en Fecha y hora forma descendente). Dos condiciones en esa búsqueda son:
1- Buscando lo mismo Activo para cual Discreto =1 (es decir, XY01 o XY02)
2- Mira hasta el valor más reciente de Acción = 1 es encontrado .
Calcule el número de días entre la última vez que la acción fue 1 frente a la fecha y hora de la fila actual.
Si la diferencia (en días) >= days_threshold = 4 ---> entonces Acción de la fila actual = 1
De lo contrario, si la diferencia (en días) < days_threshold ---> entonces Acción de la fila actual = 0
Solo interesado en encontrar la hora más reciente cuando la Acción fue "1"... Una vez que se encuentra ese valor único (si existe), la búsqueda puede detenerse en ese punto. El límite de búsqueda es hasta la primera aparición de ese activo (es decir, el registro más antiguo). Si la acción nunca se configuró en "1" anteriormente, entonces la acción de la fila actual se puede configurar en "1"
por ejemplo, la fila 2 es la primera vez que XY01 obtiene Acción = 1 (basado en Discreto, que a su vez está vinculado a algunas reglas, solo muestra valores w/ en este ejemplo).
a continuación, en la fila 3, Discreto vuelve a establecerse en 1, pero esta vez la Acción debe ser 0, ya que la diferencia de días entre las filas anterior y actual es 0 (< days_threshold).
De manera similar, para la fila 5, la Acción sigue siendo 0, ya que solo pasaron 3 días desde la última vez que la Acción fue 1.
Finalmente, Action se establece en "1" en la fila 6.
Proporcionó dos activos siguiendo esta idea: establezca los valores deseados en Acción (deseado).
Prefiero que esto sea una fórmula en lugar de un guión.
gracias de antemano equipo JMP.
Altugbayram

Fusión y limpieza de datosIngeniería de Calidad y ProcesosRe: Fórmula: cómo encontrar la fila más reciente (según las condiciones) y recuperar el valor de una columna diferenteJarmo
Esto funcionó excelente.También abrió mi comprensión de las fórmulas para contener una lógica más compleja cuando están separadas por ";".
Además, es interesante que 0 en este caso funcione como reinicio inicial para un parámetro DateTime.
Jarmo/Jim: gracias por la ayuda extremadamente rápida en esto... agradezco el apoyo.
Re: Fórmula: cómo encontrar la fila más reciente (según las condiciones) y recuperar el valor de una columna diferenteAdemás, uso Lag, Date Difference muchas veces en fórmulas. Pero como esto se vuelve un poco complicado como código y debido a mi falta de experiencia en la integración de scripts en fórmulas, lucho un poco en ese frente. Si la intención fuera la cantidad de registros en lugar de los días calendario, podría hacerlo fácilmente debido a la función de índice disponible. El requisito de "día" lo hace más difícil.
Re: Fórmula: cómo encontrar la fila más reciente (según las condiciones) y recuperar el valor de una columna diferenteSolo la parte de la fórmula sería esta y debería poder agregarla directamente a la fórmula desde la información de la columna después de haber creado una nueva columna
As Constant(
latest_ac = 0;
ret_val = 0;
);
If(:Asset == Lag(:Asset),
If(:Discrete & Date Difference(latest_ac, :DateTime, "day") >= :days_threshold,
latest_ac = :DateTime;
ret_val = 1;
,
ret_val = 0;
);
,
latest_ac = 0;
ret_val = 0;
);
ret_val;
También adjunto la tabla. Y si no está familiarizado con las fórmulas, puede leer algunas partes de este Uso de JMP > Crear fórmulas en JMP
Re: Fórmula: cómo encontrar la fila más reciente (según las condiciones) y recuperar el valor de una columna diferenteHola, ¿podría adjuntar su versión para que pueda ver cómo se integra el script en la fórmula? Soy novato en poner scripts en fórmulas.
gracias.
Re: Fórmula: cómo encontrar la fila más reciente (según las condiciones) y recuperar el valor de una columna diferenteMi fórmula aún debería funcionar bien, ya que ya estaba usando días en lugar de meses (hice la conversión en mi tabla de prueba, pero lo olvidé). Action2 es el resultado de la fórmula que proporcioné y no hay diferencia entre ella y la columna Action(Desired):

Sugiero consultar el índice de secuencias de comandos para como constante, diferencia de fecha y retraso. Esos deberían ayudar con la comprensión de la fórmula.
Re: Fórmula: cómo encontrar la fila más reciente (según las condiciones) y recuperar el valor de una columna diferenteConsulte a continuación mi próxima versión con el formato DateTime corregido (debería haber sido M/D/Y...)
Estoy buscando una fórmula que pueda hacer esto, si es posible. Gracias.
Re: Fórmula: cómo encontrar la fila más reciente (según las condiciones) y recuperar el valor de una columna diferenteHe corregido el formato de DateTime en esta próxima versión. Gracias por tu ayuda.
Re: Fórmula: cómo encontrar la fila más reciente (según las condiciones) y recuperar el valor de una columna diferenteLa restricción de "días" mide el tiempo del calendario: "cuántos días pasaron desde que la acción fue 1" es la pregunta.
Me doy cuenta de que puse mal el formato en la columna DateTime como D/M/Y
Debería haber sido M/D/Y....
Mis disculpas por el error.
entonces las filas 3 y 5 están en el 2 y 5 de junio respectivamente.
¿Sería posible crear una fórmula para esto?
Gracias equipo JMP.
Re: Fórmula: cómo encontrar la fila más reciente (según las condiciones) y recuperar el valor de una columna diferenteTengo una pregunta sobre su columna DateTime.Tal como lo definió, todos los valores para el Activo = "XY01" se midieron el día 6 de varios meses para el año 2022.
fila 3 = 6 de febrero de 2022
fila 5 = 6 de mayo de 2022
que tiene 89 días de diferencia, pero usted indica que la acción deseada es 0.
@jthi La respuesta muestra una Acción de 1, al igual que mi propio cálculo independiente.
¿Qué nos estamos perdiendo?
Re: Fórmula: cómo encontrar la fila más reciente (según las condiciones) y recuperar el valor de una columna diferenteAlgo como esto podría funcionar:
dt << New Column("Action", Numeric, Nominal, Formula(
As Constant(
latest_ac = 0;
ret_val = 0;
);
If(:Asset == Lag(:Asset),
If(:Discrete & Date Difference(latest_ac, :DateTime, "day") >= :days_threshold,
latest_ac = :DateTime;
ret_val = 1;
,
ret_val = 0;
);
,
latest_ac = 0;
ret_val = 0;
);
ret_val;
));