almacenamiento de variables desde el archivo y uso para la función máxima en secuencias de comandos jslhola miembros,
Soy un usuario nuevo, acabo de comenzar con las secuencias de comandos JSL, ¿podría proporcionar una sugerencia sobre cómo ejecutar a continuación?
tengo 2 archivos
File1: contiene datos con miles de columnas (cadena) y fila (números)
Archivo2: contiene algunas listas de columnas que creé manualmente para elegir la columna interesada del archivo1
mi necesidad es hacer la función máxima basada en la lista del archivo 2 y crear una nueva columna en el archivo 1
a continuación se muestra el código que probé y no funcionó como se esperaba.
dt = Abrir ("C:/Archivo2.csv")
lista = dt << obtener nombre; // lista = es básicamente algunos nombres de columna aleatorios de archivo1 = fila 1, fila2, fila10, etc.
dt1 = Abrir ("C:/Archivo1.jmp")
Nueva columna ("lista máxima", Numérico, Fórmula (Max (lista)));
Tabla de datossecuencias de comandosRe: almacenamiento de variables desde un archivo y uso para la función max en secuencias de comandos jslNo estoy seguro de cómo se ven sus datos, pero aquí hay una sugerencia. No es la solución más simple y requiere JMP16+
Names Default To Here(1);
dt = New Table("File2",
Add Rows(0),
Compress File When Saved(1),
New Column("Column 1", Character, "Nominal", Format("Best", 12), Set Values({"Column 1", "Column 2"}))
);
dt1 = New Table("File1",
Add Rows(3),
Compress File When Saved(1),
New Column("Column 1", Numeric, "Continuous", Format("Best", 12), Set Values([1, 1, 1])),
New Column("Column 2", Numeric, "Continuous", Format("Best", 12), Set Values([2, 2, 2])),
New Column("Column 3", Numeric, "Continuous", Format("Best", 12), Set Values([3, 3, 3]))
);
Show(dt << Get Name); // this will get name of the datatable not columns
max_list = Column(dt, "Column 1") << get values;
expr_max = Expr(Max());
For Each({col}, max_list,
Insert Into(expr_max, NameExpr(AsColumn(Column(dt1, col))))
);
Show(NameExpr(expr_max));
Eval(EvalExpr(
dt1 << New Column("MaxList", Numeric, Continuous, Formula(
Expr(NameExpr(expr_max))
));
));
Inserte una expresión en otra usando Eval Insert, Eval Expr, Parse y Substitute para una buena lectura
Re: almacenar variables de un archivo y usar la función max en scripts jslmuchas gracias txnelson,
funcionó . Estaba cometiendo un simple error al no usar el nombre de la columna Maxlist en el archivo 2.
Pero recibí otro error: el espacio de nombres "office1.close:today" no está definido y devuelve el valor máximo entre el argumento o los valores dentro de la matriz única del argumento de la lista.
" office1.close:today "es uno de los archivos2
Si abro la columna maxlist del archivo 1 y hago clic en editar fórmula, el error desaparece.
Re: almacenar variables de un archivo y usar la función max en scripts jslHe echado un segundo vistazo a tu última publicación y creo que tengo un nuevo script que se encargará del complejo problema del nombre que expusiste en esa publicación.
// The code below this line is the that does the calculations The code above this line would
// not normally be included
Names Default To Here( 1 );
// point to the large data table with lots of rows and columns
dt = Data Table( "Main" );
// If you are opening the table from a folder, this statement would be
// dt = open("the path to the table");
// point to the second data table that contains a list of columns to be summed
dtMax = Data Table( "config" );
// If you are opening the table from a folder, this statement would be
// dtMax = open("the path to the table");
// Just added a short pause so one can see the original tables before changing
// Create the new columns
For( i = 1, i <= N Cols( dtMax ), i++,
sumList = Column( dtMax, i ) << get values;
dt << New Column( Column( dtMax, i ) << get name );
nameList = ":\!"" || sumList[1] || "\!"n";
For( k = 2, k <= N Rows( dtMax ), k++,
Insert Into( nameList, ", :\!"" || sumList[k] || "\!"n" )
);
Column( dt, N Cols( dt ) ) << set formula( Eval( Parse( "max(" || nameList || ")" ) ) );
);Re: almacenar variables desde un archivo y usar la función for max en scripts jsl
Gracias por la sugerencia, no funcionó como esperaba, tal vez esté haciendo algo mal. Para ser más claro, proporcioné cómo se ve el archivo y los requisitos.
El archivo 1 se ve así (esta es mi tabla principal donde me gustaría encontrar los valores máximos de office1,2,4)
| oficina1 | oficina2 | oficina3 | oficina4 | oficina 5 |
| 2 | 3 | 0 | 6 | 1 |
| 3 | 2 | 6 | 4 | 4 |
| 2 | 5 | 3 | 2 | 3 |
| 1 | 0 | 2 | 3 | 2 |
| 4 | 1 | 2 | 7 | 1 |
| | | | | |
Salida esperada con la nueva columna Maxlist (valores de office1,2,4)
Solución simple: Nueva columna ("MaxList", Numérico, Continuo, Fórmula (Max(:"office1",:"office2,:"office4")));
| oficina1 | oficina2 | oficina3 | oficina4 | oficina 5 | .. | Lista máxima | | |
| 2 | 3 | 0 | 6 | 1 | | 6 | | |
| 3 | 2 | 6 | 4 | 4 | | 4 | | |
| 2 | 5 | 3 | 2 | 3 | | 5 | | |
| 1 | 0 | 2 | 3 | 2 | | 3 | | |
| 4 | 1 | 2 | 7 | 1 | | 7 | | |
| | | | | | | | | |
Dado que mi lista máxima cambia a diario, me gustaría usar otro archivo2 como parámetro de entrada para la lista máxima.
archivo2: lista de nombres de columnas proporcionadas como parámetro de entrada y ejecuta el script
Estoy buscando una solución donde pueda dar la lista máxima en el archivo 2 y ejecutarla en el archivo 1.
Nueva columna ("MaxList", Numérico, Continuo, Fórmula (Max( Basado en la lista del archivo2 ")));