Estrazione di una stringa da un'intestazione di colonna e aggiunta a un'altraCiao,
Ho uno script di importazione che uso per importare i risultati in JMP da Excel. Il modello Excel è usato da molte persone ed è bloccato per la modifica. Abbiamo due colonne di risultati in Excel che sono entrambe chiamate "Risultati - XXX" dove XXX viene sostituito usando un marco Excel a ciò che viene studiato, quindi cambia in ogni file. Abbiamo anche colonne chiamate Risultato JMP 1 e Risultato JMP 2 che sono uguali alle colonne dei risultati e in formato numerico. che usiamo come importazione JMP non può importare un numero scientifico da Excel. Quando apro Excel in JMP ottengo qualcosa come l'immagine qui sotto:

Sto cercando di scrivere uno script che estragga la parola successiva a "Risultati -" dall'intestazione della colonna e sostituisca l'intestazione della colonna Risultato JMP, assicurandomi però che sostituisca l'intestazione corretta. Quindi il risultato sarebbe:

Non sono sicuro che sia possibile in JMP, ma qualsiasi aiuto sarebbe molto gradito. Non so nemmeno come iniziare estraendo la fine della stringa dell'intestazione di colonna, per non parlare dei passaggi successivi. Grazie in anticipo.
Automazione e scriptingRe: Estrazione di una stringa da un'intestazione di colonna e aggiunta a un'altraEcco l'opzione JSL pura. Può (e lo farà) rompersi abbastanza facilmente a seconda dei tuoi dati, dato che ho dovuto fare parecchie ipotesi
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(1),
Compress File When Saved(1),
New Column("Results - DNA", Numeric, "Continuous", Format("Best", 12), Set Values([.]), ),
New Column("Results - Protein", Numeric, "Continuous", Format("Best", 12), Set Values([.])),
New Column("JMP Result 1", Numeric, "Continuous", Format("Best", 12), Set Values([.])),
New Column("JMP Result 2", Numeric, "Continuous", Format("Best", 12), Set Values([.]))
);
// Assume that you extract last word from result columns
// and results are first then jmp columns and there is equal amount
result_columns = {};
jmp_columns = {};
colnames = dt << Get Column Names("String");
For Each({colname}, colnames,
If(Starts With(colname, "Results - "),
Insert into(result_columns, Word(-1, colname, " "));
,
Insert Into(jmp_columns, colname)
)
);
For Each({{rescol, jmpcol}}, Across(result_columns, jmp_columns),
Column(dt, jmpcol) << Set Name(rescol);
);
Write();Re: Estrazione di una stringa da un'intestazione di colonna e aggiunta a un'altraCIAO,
Ho allegato una tabella di dati di prova. Prova questo script:
dt = current data table();
for each({name,i}, dt << get column names(string),
if (contains(name, "Results -"),
new_name_string = word(2, name, "- ");
column(dt,i) << set name(substitute(name, "Results -", "Results_Excel -" ));
for each({name2,p}, dt << get column names(string),
if (contains(name2, "JMP Result"),
column(dt,p) << set name(new_name_string);
Break();
,
);
);
,
);
);
Questo dovrebbe fare ciò che stai cercando. Faccelo sapere se non è così.
Modifica: ho appena visto la fantastica soluzione di Jarmos. Potresti scegliere questa se non vuoi cambiare i nomi delle colonne "excel".
Saluti,
Giona
Re: Estrazione di una stringa da un'intestazione di colonna e aggiunta a un'altraMi è venuta in mente anche l'opzione non scripting.
Crea tabella impilata

Crea l'ultima colonna di parole dall'etichetta

Ora hai la tabella di mappatura

Torna alla tabella originale e ricodifica i nomi delle colonne

Utilizzare Applica mapping per tabella...


E clicca su Ricodifica


Peccato che JMP non sia in grado di creare automaticamente uno script appropriato per questo, poiché utilizzerà semplicemente i valori di mapping direttamente nello script, quindi questo potrebbe essere un processo manuale a meno che non si riesca a creare in qualche modo una "tabella di mapping completa" per inserirla nello script.
// Recode column names
Local({dt = Data Table("Untitled 2"), names},
names = Recode(
dt << Get Column Names(String),
{Map Value(
_rcOrig,
{"JMP Result 1", "DNA", "JMP Result 2", "Protein"},
Unmatched(_rcNow)
)}
);
For Each({name, i}, names, Column(dt, i) << Set Name(name));
);