Hola a todos,
Soy relativamente nuevo en JMP y especialmente en scripting en JSL. Estoy buscando una manera de aplicar un script existente a todas las tablas de datos actualmente abiertas (importadas mediante la importación de varios archivos). Aunque investigué en la gran cantidad de hilos de la comunidad sobre este tema, no pude encontrar una solución que funcionara.
Bien, tengo el siguiente código JSL en funcionamiento (nota: integrado en un flujo de trabajo, si es relevante):
// Specify the dataset and the suffix to search for in column headers
dt = Current Data Table();
// Define suffix of interest for replacement
targetSuffix = "TimeAbs";
// Get list of column names from the current data table
colNames = dt << Get Column Names( "string" );
// Loop through all column names and check if the target suffix is present
For( i = 1, i <= N Items( colNames ), i++,
If( Contains( colNames[i], targetSuffix ),
// If the target suffix is found, change the column header to "Date"
Column( dt, colNames[i] ) << Set Name( "Date" )
)
);La función actual del flujo de trabajo es reemplazar el nombre de una columna en la tabla de datos actualmente abierta; sin embargo, este nombre puede variar entre archivos, por lo que decidí buscar solo un sufijo fijo.
Ahora me gustaría expandir este script para aplicarlo a varias tablas de datos que tengo abiertas actualmente. He visto soluciones en tareas similares basadas en For o For Each Loops y también con scripts de tabla, pero como dije, soy bastante nuevo en JSL y todavía no he tenido éxito.
Además, esto debe ser bastante genérico, porque los nombres de los archivos y las columnas pueden variar drásticamente.
El objetivo final es entonces concatenar estas tablas, pero podría estar fuera del alcance de una sola pregunta.
Muchas gracias por cualquier consejo o idea.
Puede obtener una lista de tablas con Obtener lista de tablas de datos() y luego recorrerla
Names Default To Here(1);
targetSuffix = "TimeAbs";
For Each({dt_cur}, Get Data Table List(),
colNames = dt_cur << Get Column Names("String");
For Each({colname}, colnames,
If(Contains(colname, targetSuffix),
Column(dt_cur, colname) << Set Name("Date")
)
);
);
También puedes convertir el interior de tu bucle en una función o expresión.
Names Default To Here(1);
change_table_name = function({dt, targetsuffix = "TimeAbs", newname = "Date"}, {Default Local},
colnames = dt << Get Column Names("String");
For Each({colname}, colnames,
If(Contains(colname, targetsuffix),
Column(dt, colname) << Set Name(newname)
)
);
);
For Each({dt_cur}, Get Data Table List(),
change_table_name(dt_cur);
);