Cómo usar max entre varias columnas con la condición "obtener filas donde"Parece una pregunta fácil pero estoy luchando por resolverla...
Tengo este tipo de tabla de datos:

Va hasta 64, que es el parámetro "dim" en mi script.
Busco el máximo y el mínimo de todos median_range_mm 1, 2, 3... hasta 64. Pero no quiero que JMP mire las filas donde target_status es diferente de 5 o 9.
Como puede ver, cuando el estado del objetivo es 10, supera el rango en 39996.
Es más fácil de entender con mi código:
maxValueVar = 0 ;
maxValue = Max( :median_range_mm [dt << get rows where( :target_status == 5 | :target_status == 9 ) ] );
minValue = Min( :median_range_mm[dt << get rows where( :target_status == 5 | :target_status == 9 )] );
For( p = 2, p <= dim, p++,
name = Column(dt, "target_status " || Char( p ));
nom = Column(dt, "median_range_mm " || Char( p )); // browse every columns of median_range_mm
MaxValueVar = Col Max( nom [dt << get rows where ( name == 5 | name == 9 )] );
If(
maxValueVar > maxValue, maxValue = maxValueVar,
minValueVar < minValue, minValue = minValueVar
);
);
Tenga en cuenta que funciona para la primera columna que no configuré. También funciona si comento
[dt << get rows where ( name == 5 | name == 9 )]
¿Alguna idea de cómo funcionan "obtener filas donde" o "columna máxima ()"?
Gracias
Re: Cómo usar max entre varias columnas con la condición "obtener filas donde"@txnelson
@uday_guntupalli
Gracias por sus respuestas. Tal vez no fui lo suficientemente claro al exponer mi problema.
El principal punto de bloqueo es que puedo obtener el Máximo de la columna "median_range_mm" con el filtro en la columna "target_status" con el código:
maxValue = Max( :median_range_mm [dt << get rows where( :target_status == 5 | :target_status == 9 ) ] ); // ==> OK
minValue = Min( :median_range_mm[dt << get rows where( :target_status == 5 | :target_status == 9 )] ); // ==> OK
Pero una vez que itero sobre las columnas:
For( p = 2, p <= dim, p++,
name = Column("target_status " || Char( p ));
nom = Column("median_range_mm " || Char( p ));
MaxValueVar = Max( nom [dt << get rows where ( name == 5 | name == 9 )] );</CODE></PRE><P>MaxValueVar y MinValueVar no obtienen datos "." (Creo que es<SPAN> Carácter de valor faltante para columnas numéricas)</SPAN> .</P><P>En la ventana de depuración, creo que el tipo de "nombre" y "nom" importa. No es un tipo de columna...</P><P> </P><P>La idea es que "nombre" sea la columna "target_status 2", luego 3 y luego 4 ... con la iteración en la p.</P><P>La misma idea con "nom", que es la columna "median_range_mm 2", luego 3 y luego 4 ...</P><P>Entonces, para p = 2, busco el máximo de median_range_mm 2 donde "target_status 2" == 5 o 9.</P><P>Entonces p = 3 ... hasta 64</P><P> </P><P>Finalmente, si "máximo de mediana_rango_3" > "máximo de mediana_rango_2", entonces "máximo de mediana_rango_3 toma el valor máximo:</P><PRE><CODE class=" language-jsl">If(
MaxValueVar > maxValue, maxValue = MaxValueVar,
MinValueVar < minValue, minValue = MinValueVar
);
Gracias por leer,
Re: Cómo usar max entre varias columnas con la condición "obtener filas donde"Creo que esto podría ser una solución para lo que está intentando hacer
min_value = Col Quantile( If( Row() <=64 & ( :target_status == 5 |
:target_status == 9 ),
:median_range_mm
,
.
), .5<BR />);Re: Cómo usar max entre varias columnas con la condición "obtener filas donde"@Rob128 ,
Estoy luchando para entender exactamente lo que quieres?Déjame intentar mostrarte algunos pasos:
Lo siguiente debería darle todas las filas, donde target_status es 5 o 9, como lo ha intentado.
SR = dt << Select Where(:target_status ==5 | :target_status ==9) << get selected rows;
Ahora, tiene la lista de filas donde se cumple su condición, lo siguiente que quiere si entiendo su pregunta es el valor mínimo y máximo.
MedianValues = dt:median_range_mm << Get Values;
MedianValuesDes = MedianValues[SR]; // Filter out and get only the rows with target status of 5 or 9
MaxVal = Max(MedianValuesDes );
MinVal = Min(MedianValuesDes );
Estoy bastante seguro de que hay muchas más formas de hacerlo, pero estoy tratando de dividirlo en pasos para que puedas seguir el pensamiento. Si esto no es lo que busca, ¿puede explicar un poco más claramente lo que busca, por favor?