Cómo crear una columna de fórmula para encontrar el máximo de varias columnas<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Tengo varias columnas de datos numéricos (vea el ejemplo a continuación) y me gustaría crear una columna de fórmula para encontrar el valor máximo para cada fila en las columnas.Cualquier ayuda sería apreciada.¡Gracias!
Valor 1 Valor 2 Valor 3 Valor máximo (yo pondría la fórmula en esta columna)
1 9 6 9
2 1 5 5
3 7 4 7
4 2 6 6
Re: Cómo crear una columna de fórmula para encontrar el máximo de varias columnasNo estoy seguro de por qué, pero el código txnelsons no funcionó para mí.
Después de la depuración, tuve que cambiar la última línea a:
namelist[ Loc( as list(maxes`), Max( maxes ) )[1] ];
ahora parece funcionar
Re: Cómo crear una columna de fórmula para encontrar el máximo de varias columnasAquí hay un ejemplo simple que muestra el nombre de la columna máxima.
Names Default To Here( 1 );
// Open Data Table: semiconductor capability.jmp
// → Data Table( "semiconductor capability" )
dt = Open( "$SAMPLE_DATA/semiconductor capability.jmp" );
dt << New Column( "Example",
character,
formula(
If( Row() == 1,
namelist = {"NPN1", "NPN2", "NPN3", "NPN4"}
);
maxes = [];
For( i = 1, i <= N Items( namelist ), i++,
maxes = maxes || Matrix( Column( namelist[i] )[Row()] )
);
If( Row() <= 5,
Show( maxes )
);
namelist[Loc( maxes, Max( maxes ) )[1]];
)
);
Re: Cómo crear una columna de fórmula para encontrar el máximo de varias columnasEsto puede ser inconsistente, pero ¿qué fórmula de columna daría como resultado no el de la columna máxima, sino el de la columna con el valor máximo?tia
Re: Cómo crear una columna de fórmula para encontrar el máximo de varias columnas@txnelson ¡Eres un mago! Gracias por la ayuda.
Re: Cómo crear una columna de fórmula para encontrar el máximo de varias columnasLa sintaxis que creó para su ejemplo no funcionará; sin embargo, lo que he deducido de ella es que desea crear una nueva columna que contenga el valor máximo en una lista de columnas.El código especificado en una fórmula, como
:a * 2 + :p</img>
debe ingresarse como la cadena literal real que uno desea para la fórmula.JMP no realizará ninguna evaluación del JSL en la fórmula antes de pasarlo a la nueva columna que se está creando.Por lo tanto, la fórmula que uno quiere utilizar debe realizarse plenamente.Y en su código, debe ser dinámico, lo que requiere que la declaración de fórmula se cree en JSL y luego se pase a la fórmula.
A continuación se muestra un script que muestra una forma de hacerlo.
names default to here(1);
dt = Current Data Table();
// The formula that needs to be passed into the new column JSL needs
// to look like
// Max( :NameA, :UniqueX, :Name bb )
// A literal string of ":NameA, :UniqueX, :Name bb" needs to be created
// and then plugged into the JSL and then executed
// ":NameA, :UniqueX, :Name bb" is just an illustration, what the
// make up of the string needs to be derived from the actual column
// names in the data table
FreqList = dt << get column names( string, numeric );
freqString = "";
// build the JSL in the form that is required for the formula
For( i = 1, i <= N Items( FreqList ), i++,
If(
Contains( FreqList[i], "Unique" ) == 1 |
Contains( FreqList[i], "Name" ) == 1,
If( i==1, delim = "", delim = ",");
freqString = freqString || delim || " :" || FreqList[i]
)
);
// Run the command, passing into the formula the command string developed above
Eval( Parse( "dt << New Column (\!"Freq\!", numeric, Formula( Max( " || freqString || " )));" ) );
Re: Cómo crear una columna de fórmula para encontrar el máximo de varias columnas@txnelson Estoy teniendo un problema similar. Donde quiero obtener el máximo de varias columnas. En mi ejemplo tengo una lista de columnas llamada FreqList. Que creé usando una fórmula similar a,
dt = current data table();
FreqList = dt << get column names( string, numeric );
For( i = N Items( FreqList ), i >= 1, i--,
If( Contains( FreqList[i], "Unique" )== 0,
FreqList= Remove( FreqList, i, 1 ),
Contains( FreqList[i], "Name" )== 0,
FreqList = Remove( FreqList, i, 1 )
)
);
// Then I was thinking something like the following should work,
dt << New Column ("Freq", numeric, Formula(Col Max(FreqList)));La forma manual de hacerlo sería crear una nueva columna llamada "Freq". Luego, cree una fórmula como Máximo(:Freq1,:Freq2,:Freq3,FreqN), que crearía una nueva columna que tiene la frecuencia máxima según la fila.
¿Cómo haría esto en JSL?
Re: Cómo crear una columna de fórmula para encontrar el máximo de varias columnasLa pregunta formulada por @adampaulsmith y respondido por @pmroz utiliza la función Maximum() en una fórmula definida para la columna resultante.La fórmula recorrerá automáticamente cada fila y aplicará la fórmula.Por lo tanto, no es necesario hacer ninguna referencia a las filas.
Sin embargo, si está utilizando esto en JSL abierto, puede agregar un subíndice a las referencias de las columnas para indicar qué fila procesa.
For( theRow = 1, theRow <= 10, theRow++,
:MaxValue[theRow] = Maximum( :Value 1[theRow], :Value 2[theRow], :Value 2[theRow] );
);
Consulte la documentación sobre JSL en la Guía de secuencias de comandos.
Ayuda==>Libros==>Guía de secuencias de comandos
Re: Cómo crear una columna de fórmula para encontrar el máximo de varias columnasSi tiene muchas filas que desea buscar, ¿existe una función para seleccionar un rango de filas en lugar de escribir cada fila en la función?
Re: Cómo crear una columna de fórmula para encontrar el máximo de varias columnasGracias ! Sabía que tenía que ser algo sencillo.
Re: Cómo crear una columna de fórmula para encontrar el máximo de varias columnasEl Función máxima() Hará esto por ti.
Maximum(:Value 1, :Value 2, :Value 3)