Stapeln Sie Tabellen aus Excel nebeneinander und fügen Sie Kopfspalten hinzuIch habe zwei Tage lang damit gekämpft, Daten im richtigen Format aus Excel in JMP zu übertragen.
Ich habe Hunderte von Excel-Tabellen, aber die Daten sind unorganisiert. In einer Excel-Tabelle befinden sich Hunderte von Tabellen nebeneinander.
Ich möchte die Daten über verschiedene Tabellen hinweg stapeln, aber auch neue Spalten mit den zugehörigen Kopfdaten erstellen. Dies ist mir bisher nur in einer Tabelle gelungen, lässt sich aber nicht auf alle Tabellen oder Tabellenblätter in verschiedenen Excel-Dokumenten übertragen. Die Tabellenblätter haben zudem oft unterschiedliche Registerkartennamen, aber wenn ich es nur in einem Excel-Dokument zum Laufen bringen könnte, wäre das schon sehr gut.

InhaltsorganisationWindowsBetreff: Tabellen aus Excel nebeneinander stapeln und Kopfspalten hinzufügenKönnen Sie eine Excel-Beispieldatei bereitstellen? Wenn Sie nur wenige verschiedene Dateitypen haben, erleichtern mehrere Beispiele die Beantwortung.
Betreff: Tabellen aus Excel nebeneinander stapeln und Kopfspalten hinzufügenHallo Jarmo,
Absolut, ich habe einige Dummy-Daten angehängt. Es können bis zu 200 Tabellen nebeneinander stehen, und ich habe verschiedene Arbeitsblätter in derselben Excel-Datei hinzugefügt, nur um die Änderung der Registerkartennamen anzuzeigen. Tatsächlich befinden sich diese Tabellen jedoch oft in separaten Excel-Tabellen innerhalb eines Ordners. Die gelben Markierungen zeigen, wo neue Überschriften benötigt werden, und die orange Markierung ist nur vorhanden, weil im eigentlichen Datensatz einige hundert leere Zeilen vorhanden sind, bevor diese Daten darunter beginnen.
Idealerweise würde ich gerne alle Parameter (Parameter 1–19, es gibt noch mehr, wenn Sie in Excel nach unten scrollen) unter einer Parameterüberschrift und die Werte unter einer Wertüberschrift einfügen und Spalten hinzufügen, um anzuzeigen, dass diese Daten zu den Werten der Überschriften 1/2/3 (und 4) gehören, indem ich Spalten wie im Originalbeitrag hinzufüge.
Letztendlich werde ich auch versuchen, die beiden Datensätze (VCL- und VL-Kopfspalten) auf ähnliche Weise mit einigen Kennungen aus den Kopfzeilen 1/2/3 (und 4) zu speichern.
Lassen Sie es mich wissen, wenn Sie eine Idee haben, ich wäre Ihnen sehr dankbar!
Danke
Lewis
Betreff: Tabellen aus Excel nebeneinander stapeln und Kopfspalten hinzufügenEs wird nicht einfach sein, denn ehrlich gesagt handelt es sich um schrecklich formatierte Daten. Die beste Lösung wäre, zur Quelle zu gehen und die Daten dort zu korrigieren, aber das ist selten eine Option.
Ich würde damit beginnen, die Daten so roh wie möglich in JMP zu ziehen, also so etwas wie das hier


Und darauf aufbauend würde ich ein Skript erstellen, da diese Daten ohne JSL zu viele Probleme bereiten (ohne JSL kommt man wahrscheinlich recht weit, aber mit JSL ist es deutlich einfacher). Das Korrigieren der ersten Überschriftenzeile ist wahrscheinlich das Erste, womit Sie beginnen sollten, da Sie dann die "Tabellen" und ihre Daten leichter trennen können.
Betreff: Tabellen aus Excel nebeneinander stapeln und Kopfspalten hinzufügenIch habe die von Ihnen bereitgestellte Excel-Datei etwas vereinfacht, aber die Idee wäre auch bei komplexerer Darstellung dieselbe. Ich bearbeite nur ein Arbeitsblatt, aber es ist einfach, die Blätter zu durchlaufen.
Ausgangsdaten

Importieren in JMP (aus irgendeinem Grund möchte JMP die erste leere Spalte löschen, obwohl ich es nicht dazu aufgefordert habe, aber das ist in Ordnung)

Unsere Startdaten

An dieser Stelle werde ich sofort auf JSL zurückgreifen, aber Sie könnten mit den interaktiven Funktionen von JMP problemlos einige Bereinigungen vornehmen. Beachten Sie, dass diese Lösung verschiedene Arten von Problemen in den Daten (fehlende Header, doppelte Parameter) nicht behandelt, da ich nicht weiß, was mit diesen Problemen geschehen soll.
Mehr anzeigen...
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
*/
Excel-Datei und JMP-Ergebnisdatei angehängt
Betreff: Tabellen aus Excel nebeneinander stapeln und Kopfspalten hinzufügenDas ist ausgezeichnet, danke! Das funktioniert sehr gut für die Beispieldatei. Ich werde mit der Bereinigung beginnen und sehen, wie weit ich damit komme, aber das sieht nach einem guten Weg aus, danke!