Iteración de fila y creación de una nueva columnaHola,
Estoy tratando de crear una nueva columna donde calculo AUC. Este valor solo debe calcularse siempre que el animal no sea idéntico.
Hasta ahora logré crear una nueva columna y calcular los valores:
(Data Table( "jmp forum row ite" ) << New Column( "AUC per animal",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
0.5 * (:Name( "VO2(1)-[ml/h/kg]" ) + Lag( :Name( "VO2(1)-[ml/h/kg]" ), -1 )) * (
:Name( "Time since dosing-[hours]" ) - Lag( :Name( "Time since dosing-[hours]" ), 1 ))
)
));
Pero cuando trato de incluir una verificación de iteración de fila para el animal no. ser idéntico jmp me dice que esto no debe combinarse.
For Each Row( If( :Animal No. == Lag( :Animal No., -1 ), Formula(), "no value" ) );
¿Debería hacerse esto en varios pasos o hay una mejor manera de hacerlo?
Re: iteración de fila y creando una nueva columnaHola @JulieSAppel
Los resultados finales son contradictorios. ya que le está diciendo a jump que ponga un número o un carácter en la misma columna. el programa simplemente no puede soportarlo. intente poner un valor faltante (o cero) en lugar de "sin valor"
Re: iteración de fila y creando una nueva columnaDe hecho, nunca puse esa cuerda allí, era solo para demostrar que la celda debería estar vacía si el animal no. no es idéntico a la fila de abajo
Re: iteración de fila y creando una nueva columnaEl problema que está teniendo es que está intentando modificar la fórmula de una columna que ya tiene una fórmula, y lo que realmente necesita hacer es hacer todo eso en la invocación inicial de la fórmula. Si modifica su fórmula inicial a la siguiente, creo que tendrá lo que desea.
Data Table( "jmp forum row ite" ) << New Column( "AUC per animal",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If( :Animal No. == Lag( :Animal No., -1 ),
0.5 * (:Name( "VO2(1)-[ml/h/kg]" ) + Lag( :Name( "VO2(1)-[ml/h/kg]" ), -1 )) * (
:Name( "Time since dosing-[hours]" ) - Lag( :Name( "Time since dosing-[hours]" ), 1 )),
.
)
)
);
Si desea modificar una fórmula para una columna ya existente, debe cambiar toda la fórmula. Vea el siguiente ejemplo:
Data Table( "jmp forum row ite" ) << New Column( "AUC per animal",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
0.5 * (:Name( "VO2(1)-[ml/h/kg]" ) + Lag( :Name( "VO2(1)-[ml/h/kg]" ), -1 )) * (
:Name( "Time since dosing-[hours]" ) - Lag( :Name( "Time since dosing-[hours]" ), 1 ))
)
)
;
wait(5); // pause for 5 seconds to allow for the viewing of the data table with the original formula
:name("AUC per animal") << Formula(
If( :Animal No. == Lag( :Animal No., -1 ),
0.5 * (:Name( "VO2(1)-[ml/h/kg]" ) + Lag( :Name( "VO2(1)-[ml/h/kg]" ), -1 )) * (
:Name( "Time since dosing-[hours]" ) - Lag( :Name( "Time since dosing-[hours]" ), 1 )),
.
)
);Re: iteración de fila y creando una nueva columnaMuchas gracias. Eso tiene sentido (y funciona perfectamente).
Sin embargo, estaba buscando usar un para cada iteración de fila. ¿Por qué no es esa una opción aquí?
Re: iteración de fila y creando una nueva columnaMuchas gracias. Eso tiene sentido (y funciona perfectamente). Re: iteración de fila y creando una nueva columnaAdemás, tenga cuidado de cómo usa la función Lag ().
// previous row
Lag( :Animal No., 1 )
// next row
Lag( :Animal No., -1 )
Un retraso de +1 accede a la fila anterior. Un retraso de -1 accede a la siguiente fila.