¿Cómo calcular valores relativos basados en una posición de un valor base?Hola todos,
Necesito calcular el porcentaje de participación de los valores de la columna. Valor1 basado en la posición del valor seleccionado de la columna Valor1 . Como ejemplo, si quiero hacer eso en función del segundo valor en la columna Valor1 (posición 2, o valor 2), la columna resultante Valor1_rel con valores relativos debería verse así:

Además, puede haber más datos que deben agruparse por elemento y luego, para cada elemento, el porcentaje de participación calculado (tal vez el valor normalizado o relativo es un término un poco confuso) para todos los demás valores. ¿Cómo puedo hacer eso? Si la explicación no es lo suficientemente buena, perdone y siéntase libre de preguntar.
Gracias y saludos
Tabla de datossecuencias de comandosRe: ¿Cómo calcular valores relativos basados en una posición de un valor base?Hola Brady,
con suerte, esto está permitido a pesar de que la pregunta original ya ha sido respondida.
Tengo un problema similar al de lukasz, y he estado tratando de modificar su (muy buena) respuesta para que se ajuste a mi problema.
Básicamente, también estoy tratando de dividir una columna por sí misma, sin embargo, no estoy usando la segunda (o kth) como referencia, sino que tengo una tercera columna llamada label que quiero usar para encontrar los puntos de referencia. El problema que tengo es que no puedo entender cómo hacer que el "bucle por bucle" funcione en mi caso, todo lo que hace mi script ahora es dividir cada valor por el primer valor llamado "grande" (entiendo por qué, pero no como solucionarlo).
c << new column("Rel", numeric, continuous, formula(
Eval(
Eval Expr(
:Val[(:Group << get data table) << get rows where(
label == "big" & :Group == Expr( :Group[Row()] )
)] / :Val
)
));
)
/ V
Re: ¿Cómo calcular valores relativos basados en una posición de un valor base?Hola Brady, muchas gracias por el código y la explicación. Funciona perfectamente. AtentamenteRe: ¿Cómo calcular valores relativos basados en una posición de un valor base?Hola,
Puede usar esta fórmula ciertamente compleja (quizás alguien presente una más fácil) en una nueva columna:
Eval(
Eval Expr(
:Val[(:Group << get data table) << get rows where(
Col Cumulative Sum( 1, :Group ) == 2 & :Group == Expr( :Group[Row()] )
)] / :Val
)
)
Probablemente valga la pena desempacar esto al menos un poco.
La construcción Eval( Eval Expr( )) se usa para forzar la evaluación de la expresión Expr ( :Group[Row()] ). Sin esto, se devolverán varios valores en cada fila... uno para cada grupo. Pruébelo eliminando el contenedor Eval (Eval Expr ()) y el contenedor Expr() para ver a qué me refiero.
Para determinar el valor que usaremos en la proporción, debemos tomar la segunda fila dentro del grupo actual. Para encontrar esta fila, debemos hacer coincidir el grupo (la segunda parte de la cláusula get rows where) y también debe coincidir como el segundo valor dentro del grupo. Una manera fácil de hacer esto es observar la suma acumulada de una columna de 1, agrupada por :Group. Cuando esta columna == 2, tenemos el segundo valor de algún grupo. Esto sucede en varias filas, pero la segunda parte de la cláusula restringe el resultado al grupo que coincide con el grupo de la fila actual. De esta forma, ni siquiera es necesario ordenar la tabla por grupo o valor.
Cambiar el 2 en la equivalencia de la suma acumulada a k le permite usar el valor k-ésimo en el grupo en lugar del segundo.
Salud,
Brady

Re: ¿Cómo calcular valores relativos basados en una posición de un valor base?Gracias por su comentario. Sí, había cero en la tabla en la versión anterior de la publicación, pero pensé que podría ser un poco confuso, así que pensé que tal vez sería más sencillo preguntar sobre el cálculo de los valores deseados tomando el valor de la segunda fila de cada grupo de elementos. . Y sí, el "cero" de la columna Param1 era solo para determinar el número de fila.Re: ¿Cómo calcular valores relativos basados en una posición de un valor base?Valor1_rel podría ser una columna de fórmula.
No estoy seguro de cuál sería la fórmula basada en sus datos de ejemplo.
Por lo general, esperaría relativo a medio Valor1 - Param1 , o Valor1 - 0 , pero ninguno coincide con el ejemplo.
Editar: creo que la fórmula para Valor1_rel que coincide con tus datos es 2/ Valor1 . Puede poner eso en la fórmula de la columna. Pero...
Sospecho que tiene cero, de algún lado, y quiere buscar la fila número 2 desde cero. Las tablas de datos JMP generalmente se organizan con todos los datos en una fila que pertenecen juntos. Podría tener sentido poner los valores de Param como una propiedad de columna de la columna Valor. Eso requerirá un poco más de secuencias de comandos JSL, pero podría reflejar mejor la organización de sus datos.