¡Cómo obtener valores máximos en varias columnas con datos faltantes en sus filas!Hola,
Digamos que tenemos un conjunto de datos que queremos obtener valores máximos en las columnas seleccionadas
dt = New Table( "Untitled",
New Column( "a@b;2", Numeric, Set Values( [12, 33, 1] ) ),
New Column( "b", Numeric, Set Values( [2, 11, 2] ) ),
New Column( "c@d;3", Numeric, Set Values( [333, 1, 0] ) )
);
colnames = dt << getcolumnnames;
use_cols = {};
include = {"@"};
For( j = 1, j <= N Items( include ), j++,
For( i = 1, i <= Nitems( colnames ), i++,
If(Contains(colnames[i], include[j]),
insert into (use_cols , colnames[i]))
));
dt << new column("max_col",numeric,formula(Maximum(use_cols)))
No entiendo por qué devuelve el valor faltante en max_col. ¿Deberíamos recorrer use_cols ?
¡Gracias!
Tabla de datosOtrosecuencias de comandosRe: ¡Cómo obtener valores máximos en varias columnas con datos faltantes en sus filas!¡Lo siento! ¡esto no funcionó!Re: ¡Cómo obtener valores máximos en varias columnas con datos faltantes en sus filas!¡Gracias txnelson por tu gran solución! ¡Siempre ayuda a detallar y explicar las cosas muy claras!Re: ¡Cómo obtener valores máximos en varias columnas con datos faltantes en sus filas!Ejecutando en una PC con Windows, ejecutando Windows 10, volví a varias versiones de JMP y ejecuté su secuencia de comandos, y funcionó correctamente en todas las versiones.

Su segunda calificación, que a veces le faltan valores en sus datos, no debería ser un problema.La función Maximum() maneja los valores faltantes.
Sin saber más sobre su script, señalaré un posible problema.Si observa la fórmula que se crea para la columna max_col, verá:

La fórmula se basa en la lista "use_cols", por lo que cada vez que se ejecuta o se vuelve a ejecutar la fórmula, va a la lista y usa el valor "en ese momento" de "use_cols" y lo coloca en la fórmula.Si el valor de "use_cols" es " {Nombre( "a@b;2" ), Nombre( "c@d;3" )} ", todo funcionará bien.Si por alguna razón, la lista "use_cols" ha cambiado su valor, es posible que la fórmula no funcione y obtendrá valores faltantes.Lo que realmente quieres es que la fórmula sea
Maximum( {:Name( "a@b;2" ), :Name( "c@d;3" )} )
La forma más fácil de hacer esto, según mi experiencia, es especificar la nueva columna y fórmula como:
Eval(Parse("dt << new column(\!"max_col\!",numeric,formula( Maximum(" || char(use_cols) || ")));"));
El resultado es que la fórmula se especifica como:

Re: ¡Cómo obtener valores máximos en varias columnas con datos faltantes en sus filas!Hola,
Solo necesita ayudar a JMP a darse cuenta de que la variable "use_cols" se refiere a las columnas agregando "como columnas" a su última declaración:
dt << New Column( "max_col", numeric, formula( Maximum( as columns( use_cols ) ) ) );
Re: ¡Cómo obtener valores máximos en varias columnas con datos faltantes en sus filas!Olvidé agregar, a veces las columnas también pueden contener valores faltantes. No pude descubrir cómo agregarlos cuando construí la tabla de datos.