Impila le tabelle affiancate da Excel e aggiungi le colonne di intestazioneDa 2 giorni sto faticando a estrarre i dati da Excel in JMP nel formato corretto.
Ho centinaia di fogli Excel, ma i dati sono disorganizzati. Ci sono molte tabelle una accanto all'altra (centinaia) in un foglio Excel.
Voglio impilare i dati tra le diverse tabelle, ma anche creare nuove colonne con i dati di intestazione associati. Sono riuscito a farlo solo su una tabella, ma non riesco a replicarlo su tutte le tabelle o fogli in diversi documenti Excel. I fogli tendono anche ad avere nomi di schede diversi, ma se riesco a farlo funzionare su un documento Excel sarebbe molto positivo.

Organizzazione dei contenutiFinestreRe: Impilare tabelle affiancate da Excel e aggiungere colonne di intestazionePuoi fornire un file excel di esempio? E se hai pochi tipi diversi di file, avere più esempi renderà più facile fornire risposte.
Re: Impilare tabelle affiancate da Excel e aggiungere colonne di intestazioneCiao Jarmo,
Assolutamente, ho allegato alcuni dati fittizi. Possono esserci fino a 200 tabelle affiancate e ho aggiunto fogli di lavoro diversi all'interno dello stesso file Excel solo per mostrare il cambiamento dei nomi delle schede, ma in realtà questi fogli sono spesso in fogli Excel separati all'interno di una cartella. Le evidenziazioni gialle sono dove sarebbero necessarie nuove intestazioni, credo, e l'evidenziazione arancione è lì solo perché nel set di dati effettivo ci sono alcune centinaia di righe vuote prima che questi dati inizino sotto di essa.
L'ideale sarebbe inserire tutti i parametri (parametri 1-19, ce ne sono altri se scorri verso il basso in Excel) sotto un'intestazione parametri, e i valori sotto un'intestazione valore, e aggiungere colonne per mostrare che questi dati appartengono ai valori intestazione 1/2/3 (e nuovo 4) aggiungendo colonne come nel post originale.
Infine, cercherò di salvare in modo simile i due set di dati (colonne di intestazione VCL e VL) con un identificatore dalle intestazioni 1/2/3 (e 4).
Fatemi sapere se avete qualche idea, ve ne sarei molto grato!
Grazie
Luigi
Re: Impilare tabelle affiancate da Excel e aggiungere colonne di intestazioneNon sarà facile, perché a dire il vero, si tratta di dati formattati in modo orribile. Andare alla fonte e correggere i dati lì sarebbe l'opzione migliore, ma raramente è un'opzione.
Inizierei estraendo i dati in JMP il più possibile grezzi, quindi qualcosa del genere


E da questo inizierei a costruire uno script poiché questi dati hanno troppi problemi da gestire senza usare JSL (probabilmente puoi arrivare abbastanza lontano senza JSL, ma con JSL sarà molto più facile). Correggere la prima riga di intestazioni è molto probabilmente la prima cosa da cui dovresti iniziare poiché allora puoi iniziare a separare più facilmente le "tabelle" e i loro dati
Re: Impilare tabelle affiancate da Excel e aggiungere colonne di intestazioneHo modificato il file excel che hai fornito per renderlo un po' più semplice, ma l'idea sarebbe comunque la stessa se fosse più complicata. Gestirò solo un foglio di lavoro, ma è facile passare in rassegna i fogli.
Dati di partenza

Importazione in JMP (per qualche motivo JMP vuole eliminare la prima colonna vuota anche se non gli ho detto di farlo, ma va bene così)

I nostri dati di partenza

A questo punto opterò immediatamente per JSL, ma potresti facilmente fare un po' di pulizia usando le funzionalità interattive di JMP. Nota che questa soluzione non gestisce diversi tipi di problemi nei dati (intestazioni mancanti, parametri duplicati) perché non so cosa si dovrebbe fare a questi
Vedi altro...
Names Default To Here(1);
dt = Open(
"$DOWNLOADS/Book1.xlsx",
Worksheets("Sheet1"),
Use for all sheets(0),
Concatenate Worksheets(0),
Create Concatenation Column(0),
Worksheet Settings(
1,
Has Column Headers(0),
Number of Rows in Headers(1),
Headers Start on Row(1),
Data Starts on Row(1),
Data Starts on Column(1),
Data Ends on Row(0),
Data Ends on Column(0),
Replicated Spanned Rows(0),
Replicated Spanned Headers(0),
Suppress Hidden Rows(0),
Suppress Hidden Columns(0),
Suppress Empty Columns(0),
Treat as Hierarchy(0),
Multiple Series Stack(0),
Import Cell Colors(0),
Limit Column Detect(1),
Column Separator String("-"),
Column Numeric Format(Index(0), Column Name(Column 1), Datatype("Character"))
)
);
// turn everything after this into functions/expressions which you can easily run on different sheets
// Take only useful data: header which belongs to parameters (first two rows)
// Parameter rows
header_rows = [1, 2];
param_rows = dt << Get Rows Where(Starts With(:Column 1, "Parameter"));
dt_headers = dt << subset(Rows(header_rows), Selected Columns(0), Output table("Data Header"));
dt_params = dt << subset(Rows(param_rows), Selected Columns(0), Output table("Data Parametere"));
Close(dt, no save);
// Drop empty columns
For Each({colname}, dt_params << Get Column Names("String"),
If(Col Number(Column(dt_params, colname)) == 0,
dt_params << Delete Column(colname)
);
);
dt_result = dt_params << Stack(
columns(dt_params << Get Column Names("String")),
Stack By Row(0),
Drop All Other Columns(1),
Number of Series(2),
Output Table("Result")
);
// Close(dt_params, no save);
// Cleanup some columns
dt_result << Delete Columns(1, 3);
Column(dt_result, 1) << Set Name("Name");
Column(dt_result, 2) << Set Name("Value");
// Add grouping for header joining
new_col = dt_result << New Column("Group", Numeric, Ordinal, Formula(
Col Cumulative Sum(1, :Name)
));
dt_result << run formulas;
new_col << Delete Formula;
headers = dt_headers[1, 0];
header_count = N Items(Associative Array(headers));
dt_headerstack = Eval(EvalExpr(dt_headers << Stack(
columns(dt_headers << Get Column Names("String")),
Stack By Row(0),
Number of Series(Expr(header_count)),
Output Table("header stack")
)));
// Close(dt_headers, no save);
// drop unnecessary columns
dt_headerstack << Delete Columns(1::N Cols(dt_headerstack)::2);
// Move header columns and remove extra header rows
dt_headerstack << Move Up;
rows_to_delete = dt_headerstack << Get Rows Where(Starts With(Column(dt_headerstack, 1)[], "Header"));
dt_headerstack << Delete Rows(rows_to_delete);
// Add grouping for update
new_col = dt_headerstack << New Column("Group", Numeric, Ordinal, Formula(
Row()
));
dt_headerstack << run formulas;
new_col << Delete Formula;
dt_result << Update(
With(dt_headerstack),
Match Columns(:Group = :Group)
);
Close(dt_headerstack, no save);
Close(dt_headers, no save); // close earlier
Close(dt_params, no save); // close earlier
Close(dt, no save); // close earlier
/*
sheetList = Get Excel Worksheets("$DOWNLOADS/Book1.xlsx"); // for sheet list to loop over
*/
File Excel e file di risultati JMP allegati
Re: Impilare tabelle affiancate da Excel e aggiungere colonne di intestazioneQuesto è eccellente, grazie! Funziona molto bene per il file di esempio, inizierò con un po' di pulizia e vedrò fin dove mi porterà, ma questo sembra un ottimo modo per procedere, grazie!