Ciao a tutti,
Sono relativamente nuovo a JMP e in particolare allo scripting in JSL. Sto cercando un modo per applicare uno script esistente a tutte le tabelle di dati attualmente aperte (importate tramite l'importazione di più file). Anche se ho effettuato ricerche nell'abbondanza di thread della community su questo argomento, non sono riuscito a mettere insieme una soluzione funzionante.
Ok, quindi ho il seguente codice JSL funzionante (nota: incorporato in un flusso di lavoro, se pertinente):
// 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 funzione attuale del flusso di lavoro è la sostituzione del nome di una colonna nella tabella dati attualmente aperta, tuttavia questo nome può variare tra i file, motivo per cui ho deciso di cercare solo un suffisso fisso.
Vorrei ora espandere questo script per applicarlo a più tabelle dati che ho attualmente aperto. Ho visto soluzioni su attività simili basate su For o For Each Loops e anche con script di tabelle, ma come ho detto sono abbastanza nuovo in JSL e non ci sono ancora riuscito.
Inoltre, questo deve essere abbastanza generico, perché i nomi dei file e dei nomi delle colonne possono variare in modo abbastanza drastico.
L'obiettivo finale è quindi concatenare queste tabelle, ma potrebbe non rientrare nell'ambito di una singola domanda.
Grazie mille per qualsiasi consiglio o idea
Puoi ottenere l'elenco delle tabelle con Get Data Table List() e poi ripetere il ciclo
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")
)
);
);
Potresti anche convertire l'interno del tuo ciclo in una funzione o espressione
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);
);