Fórmula para usar el valor anterior si no falta, de lo contrario, use el valor de la última celda ocupadaEstoy tratando de escribir una fórmula en Col3 que agregue el valor actual de Col1 con el valor rezagado de Col2, pero me encuentro con un problema tratando de averiguar cómo llevar adelante la última observación de Col2 cuando se encuentran datos faltantes y para usar este valor en la primera instancia de datos que no faltan.Eso es,
If( !IsMissing( Col1)
Col1 + Lag(Col2,1);
//create variable that contains current Col2 value;
//Else
Col1 + previously stored value from Col2;
);
Agradecería cualquier sugerencia sobre la mejor manera de lograr esto.Gracias.
| Fila# |
Col1 |
Col2 |
Col3 |
|---|
| 1 |
2 |
1 |
|
| 2 |
1 |
3 |
2 |
| 3 |
1 |
5 |
4 |
| 4 |
2 |
7 |
7 |
| 5 |
. |
. |
|
| 6 |
. |
. |
|
| 7 |
. |
. |
|
| 8 |
2 |
8 |
9 |
| 9 |
2 |
9 |
10 |
| 10 |
1 |
11 |
10 |
| 11 |
. |
. |
|
| 13 |
. |
. |
|
| 14 |
2 |
12 |
13 |
| 15 |
2 |
13 |
14 |
| dieciséis |
1 |
14 |
14 |
| 17 |
2 |
15 |
dieciséis |
Re: Fórmula para usar el valor anterior si no falta, de lo contrario, use el valor de la última celda ocupada¡Gracias, Jerry, por tu excelente explicación y por anticiparte a mi próxima pregunta sobre la incorporación de las identificaciones!
Re: Fórmula para usar el valor anterior si no falta, de lo contrario, use el valor de la última celda ocupadaLo siento, no proporcioné más explicaciones en mi respuesta anterior. Primero, para que la fórmula funcione para su tabla de datos, cambie la columna "Fecha" en las declaraciones "Si" a "Resultado de la biopsia" y el argumento "Hora" en la función Diferencia de fecha al intervalo que necesite (es decir, "Día" 
If( Row() == 1,
nm = Loc Nonmissing( :Biopsy Result << get values );
.;
,
If( Is Missing( :Biopsy Result ),
.,
Try( Date Difference( :Date[nm[Contains( nm, Row() ) - 1]], :Date, "Day" ) )
)
)
Ahora la explicación. Las fórmulas existentes no se indexan automáticamente hacia atrás o hacia adelante hasta que encuentran datos que no faltan, por lo que recurrí a secuencias de comandos para crear variables que contienen la información necesaria. Si desea obtener más información sobre las secuencias de comandos, la Ayuda->Libros->Guía de secuencias de comandos y la Ayuda->Índice de secuencias de comandos son excelentes recursos.
La sentencia ":Biopsy Result<
A continuación, si falta el resultado de la biopsia, el resultado se establece como faltante; de lo contrario, debemos hacer referencia a la fecha anterior que no falta para el cálculo de la diferencia de fechas. Contiene(nm, Fila()) encuentra la posición de la fila actual en la matriz "nm". Resta 1 de esto para encontrar la posición de la fila anterior en la matriz "nm". Este es ahora el índice, es decir, el número de fila, para el valor de fecha en la fila con el resultado de biopsia anterior que no falta. La función "Probar" ignora el error generado por la función Diferencia de fecha cuando no hay una fila anterior que no falte (es decir, la primera instancia de un resultado de biopsia).
Un par de cosas a tener en cuenta, esto supone que sus datos están ordenados por fecha dentro de ID # (como en su ejemplo). Además, si tiene varios números de ID en su tabla de datos, es posible que desee agregar otra condición para no comparar dos ID diferentes. En este caso, su fórmula/secuencia de comandos podría verse así:
If( Row() == 1,
nm = Loc Nonmissing( :Biopsy Result << get values );
.;
,
If( Is Missing( :Biopsy Result ),
.,
If( :ID # == :ID #[nm[Contains( nm, Row() ) - 1]],
Try( Date Difference( :Date[nm[Contains( nm, Row() ) - 1]], :Date, "Day" ) ),
.
)
)
)
Sé que esto es mucha información, pero dijiste que estabas "ansioso por aprender esto"... espero que esto ayude.
Re: Fórmula para usar el valor anterior si no falta, de lo contrario, use el valor de la última celda ocupadaPuede que encuentres el Herramientas de tabla de datos complemento útil para tales casos.
Re: Fórmula para usar el valor anterior si no falta, de lo contrario, use el valor de la última celda ocupadaGracias Jerry. Esto parece exactamente lo que necesito.
Desafortunadamente, soy un novato en esto y todavía necesito ayuda para descubrir cómo puedo volver a crear esto yo mismo en mi propia base de datos y el editor de fórmulas. Adjunto una versión muy simplificada de la columna de interés para un solo paciente en mis datos.
En mi base de datos hay muchas filas de datos con valores de laboratorio que estamos siguiendo, sin embargo, solo algunas de las filas tienen un resultado de biopsia. Quiero crear una fórmula que use las fechas en la columna "Fechas" para calcular la diferencia de fechas entre las biopsias cuando ocurran.
Lamentablemente no entiendo que funciones has usado para crear tu fórmula.... por ejemplo... aunque si he usado muchas veces la función "Falta" ni siquiera veo la opción de "Loc Nonmissing" en el editor de fórmulas.
Además, ¿qué significa "nm"...? Supongo que "algo matriz", pero ¿dónde encuentro eso en el editor de fórmulas?
Lo siento por la molestia, pero estoy ansioso por aprender esto, ya que parece exactamente lo que necesito.
gracias de nuevo,
CW
Re: Fórmula para usar el valor anterior si no falta, de lo contrario, use el valor de la última celda ocupadaDesafortunadamente, no puedo ver la tabla de ejemplo que proporcionó, sin embargo, el archivo adjunto puede darle una idea de un enfoque para tomar la diferencia entre las fechas actuales y anteriores que no faltan.
La fórmula de la segunda columna primero establece una matriz de filas para las celdas que no faltan en la columna Fecha. Esto proporciona una forma de hacer referencia a la fila anterior que no falta y que se utiliza como índice en la función Diferencia de fecha.
Estoy seguro de que hay otras ideas para hacer esto...
Re: Fórmula para usar el valor anterior si no falta, de lo contrario, use el valor de la última celda ocupadaLo que estoy tratando de hacer es hacer la pregunta... ¿cuál es la diferencia de fecha entre dos biopsias diferentes (columna etiquetada como TCMR) para un paciente determinado (número de punto en la primera columna) en mi base de datos? Las biopsias se realizan a intervalos irregulares y el resultado de la biopsia se muestra en la tercera columna a continuación.
Aunque sé cómo recuperar esta información si simplemente creo un subconjunto de solo las filas que contienen un resultado de biopsia y luego pido la diferencia de fecha... lo que me gustaría hacer es encontrar una manera de determinar la diferencia de fecha entre cualquiera de las filas que tienen un resultado de biopsia mientras se ignoran las filas vacías.
@jerry_cooper escribió:
Creo que esta fórmula te dará lo que buscas:
If(Is Missing(:Column 1), :Column 1, Summation(i = 1, Row(), :Column 1))
Espero que esto ayude.
-Alemán
Me puedes ayudar con esto. Idealmente con una solución que pueda ver en el editor de fórmulas o que pueda pegar en él.
Re: Fórmula para usar el valor anterior si no falta, de lo contrario, use el valor de la última celda ocupadaCreo que esta respuesta se escribió antes del lanzamiento de JMP 13 que introdujo la función Col Cumulative Sum(). Si está utilizando v13 o superior, todo lo que necesita hacer para crear una columna de suma acumulativa es hacer clic con el botón derecho en el encabezado de la columna que desea sumar y seleccionar Nueva columna de fórmula => Fila => Suma acumulativa. Esto creará una nueva columna con la fórmula adecuada. Para ver la fórmula en el editor, haga clic con el botón derecho en la nueva columna y seleccione Fórmula.
Si está utilizando una versión anterior, copie y pegue la siguiente declaración en el editor de fórmulas para ver cómo se ve:
Summation(i=1, Row(), Your Column[i])
Espero que esto ayude.
Re: Fórmula para usar el valor anterior si no falta, de lo contrario, use el valor de la última celda ocupadaCreo que esto es exactamente lo que necesito también, pero no entiendo completamente el script... ¿es posible mostrar cómo se vería esto en el editor de fórmulas...?
muchas gracias
Re: Fórmula para usar el valor anterior si no falta, de lo contrario, use el valor de la última celda ocupadaMe encuentro con este problema todo el tiempo y uso la solución dada por Jerry. Analizo las mediciones del proceso (temperatura, presión, flujo, etc.) que se recuperan de un historial de datos comprimidos. Cada pocos miles de puntos, puede haber un valor faltante.
El siguiente ejemplo calcula si el reactor está funcionando o no en función del promedio móvil de 3 puntos del flujo del catalizador, F.Cat >= 11 (anónimo, sí, obtiene la referencia...). Si falta F.Cat, calc usa el valor de la fila anterior de "¿En ejecución?".
If(
Row() < 3, 0,
Is Missing( :F.Cat ), Lag( :Name( "Running?" ), 1 ),
(Lag( :F.Cat, 2 ) + Lag( :F.Cat, 1 ) + :F.Cat) / 3 >= 11, 1,
0
)
Re: Fórmula para usar el valor anterior si no falta, de lo contrario, use el valor de la última celda ocupada<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Gracias a todos por sus comentarios y ayuda.
Creo que la sugerencia de Jerry funciona mejor para mí y no requiere el uso de una variable local que es lo que quería usar.
Re: Fórmula para usar el valor anterior si no falta, de lo contrario, use el valor de la última celda ocupadaCreo que esta fórmula te dará lo que buscas:
If( Is Missing( :Column 1 ),
:Column 1,
Summation( i = 1, Row(), :Column 1 )
)
Espero que esto ayude.
-Alemán
Re: Fórmula para usar el valor anterior si no falta, de lo contrario, use el valor de la última celda ocupada¿Siempre hemos podido tener una fórmula de columna autorreferencial?Nunca me di cuenta de que podía hacer esto.
Re: Fórmula para usar el valor anterior si no falta, de lo contrario, use el valor de la última celda ocupadaGracias Jim y Jeff,
Creo que hice el problema más complicado de lo necesario en mi descripción y el diseño de la tabla y puedo ver cómo eso puede haberlo llevado a sus sugerencias.
Si bien entiendo su sugerencia, Jeff, sobre la creación de una nueva columna que contenga los datos que no faltan, espero realizar mi trabajo sin crear nuevas columnas, ya que usaré esta fórmula para muchas columnas diferentes.Permítanme tratar de ser más claro acerca de lo que estoy tratando de lograr a través de la siguiente tabla.
Estoy tratando de crear una suma acumulada de la Columna 1 en la Columna 2. Sin crear ninguna columna adicional, esperaba crear una variable que contenga el valor actual de la suma acumulada en la Columna 2 y lo agregue al valor de la Columna 1.
Mi problema es no saber cuál es la mejor manera de crear y usar una variable que contenga el valor actual de la Columna 2 para que este valor se pueda "transportar" a través de las filas de datos faltantes de la Columna 1.La columna "Resultado que busco" muestra lo que me gustaría que produjera la fórmula de la columna 2.Con suerte, esta descripción es un poco más clara sobre lo que estoy buscando lograr.

Re: Fórmula para usar el valor anterior si no falta, de lo contrario, use el valor de la última celda ocupadaCreo que hay un error en tu descripción que tendremos que aclarar antes de poder darte una solución precisa. Su condicional dice que si COL1 NO FALTA, agréguelo al valor rezagado de Col2, y si COL1 FALTA, agregue eso a un valor previamente almacenado de Col2.
No puede agregar un Col1 faltante a nada y obtener algo que no sea faltante.
Habiendo dicho eso, construiría esta tabla con una columna a la vez. Específicamente, crearía una columna "Col2 no faltante" que no tuviera valores faltantes usando la fórmula:

Esta fórmula establece "Col2 no faltante" en Col2 cuando no falta Col2 y lo establece en el retraso de "Col2 no faltante" cuando falta Col2.

Luego puede usar un Lag (Col2 no faltante, 1) en su fórmula final.
Espero que eso ayude.
-Jeff
Re: Fórmula para usar el valor anterior si no falta, de lo contrario, use el valor de la última celda ocupadaAquí hay una versión de la fórmula que funciona:
If( Row() == 1, lagval = . );
x = Sum( :col 1, lagval );
If( Is Missing( col 2 ) == 0,
lagval = :col 2
);
x;