Hallo,
Ich habe folgendes Problem:
a) Ich erstelle eine Tabelle (nennen wir sie Tabelle dt) mit mehreren Spalten. Ich bin jedoch daran interessiert, nur bestimmte Muster (z. B. „ABC@XYZ“) in den Spaltennamen zusammen mit zwei anderen Spalten (z. B. „LCOL“, „WCOL“) zu betrachten. Ich erstelle diese Tabelle. (Diese Tabelle wird als dtB bezeichnet)
Nächste
b) Ich verwende die Tabelle dtB, rufe ihre Spalte ab und verwende eine for-Schleife, um eine Übersichtstabelle für jede dieser Spalten zu generieren, die dem Muster in Col Name entspricht.
c) Ich habe eine leere Tabellenliste erstellt, dt_sum_all
d) Mein Ziel ist es nun, alle zusammenfassenden Werte der Spalten, die dem Muster entsprechen, zusammen mit der LCOL- und WCOL-Spalte in einer Tabelle zusammenzufassen. (Ich erhalte N Tabellen für N solcher Spalten, wenn ich die neue Tabelle nicht verwende, aber das ist nicht das, was ich möchte – ich möchte 1 Tabelle )
e) Außerdem möchte ich am Ende, sobald ich eine einzelne Tabelle habe, die Spalten umbenennen (normalerweise wird SUM am Anfang jeder Spalte angehängt), z. B. SUM ( ABC@XYZ_1AS ) in ABC@XYZ_1AS . Da ich viele Spalten habe, möchte ich es in einer Schleife oder ähnlichem machen.
Was ich bisher habe ist folgendes:
dt = currentdatatable();
Wait(1);
colsd = dt << get column names( string );
pattern = "ABC@XYZ";
nd = N Items( colsd );
selCols = {"LCOL", "WCOL"};
For( i = 1, i <= nd, i++,
If( Contains( colsd[i], pattern ),
Insert Into( selCols, colsd[i] )
)
);
dtB = dt << Subset(
All rows,
Columns(selCols)
);
colNameList= dtB << get column names( string );
Wait(1);
dt_sum_all = {};
For( i = 1, i <= N Items( colNameList ), i++,
If( Contains( colNameList[i], pattern),
dt_sum = dtB << Summary(
Group( :LCOL, :WCOL ),
Sum(colNameList[i]),
Freq( "None" ),
Weight( "None" ),
) << show window(0);
);
Insert Into(dt_sum_all, dt_sum);
//Data Table (dt_sum_all) << Update (
///With(Data Table(dt_sum)),
//Match Columns(:LCOL = :LCOL, :WCOL=:WCOL)
);
////column(dt_sum, "SUM("||colNameList[i] || ")" ) << set name(colNameList[i]);
///);Der obige Code funktioniert nicht und ich erhalte für jede Spalte mehrere Tabellen anstelle einer zusammengeführten/aktualisierten. Also keinen Tisch bekommen. Kann mir bitte jemand helfen? Danke.
Wenn ich Ihren Code richtig lese, möchten Sie am Ende eine Datentabelle mit zusammenfassenden Daten für eine Reihe von Spalten erhalten, die einem Muster in der ursprünglichen Datentabelle entsprechen.
Ich glaube, Sie haben viel härter gearbeitet, als Sie mussten.Nachfolgend finden Sie ein Beispielskript, das den größten Teil Ihres Codes verwendet, aber an der Beispieldatentabelle Semiconductor Capability arbeitet, in der die Namen der Lot- und Wafer-Spalten lot_id und Wafer und nicht Ihre Lcol und Wcol lauten.Ich habe die dtB-Datentabelle eliminiert, denn wenn Sie sie nicht später im Skript benötigen, muss sie sicherlich nicht erstellt werden, nur um dann zusammenfassende Daten dafür zu erstellen.Die zusammenfassenden Daten können direkt aus der ursprünglichen Datentabelle stammen.Außerdem ist es nicht erforderlich, jede Spalte einzeln zusammenzufassen.Alle Spalten können einfach auf einmal zusammengefasst werden.Somit müssen keine Updates durchgeführt werden.Schließlich gibt es in der Übersichtsplattform eine Option, die es ermöglicht, den Spaltennamen denselben Namen wie dem Namen der Eingabespalte zu geben, sodass die Umbenennung der Spalten in der Übersichtstabelle nicht erforderlich ist.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/semiconductor capability.jmp" );
Wait( 0 );
colsd = dt << get column names( string );
pattern = "PNP";
nd = N Items( colsd );
selCols = {"lot_id", "wafer"};
For( i = 1, i <= nd, i++,
If( Contains( colsd[i], pattern ),
Insert Into( selCols, colsd[i] )
)
);
dt_sum = dt << Summary(
Group( :lot_id, :wafer ),
Sum( colNameList[Index( 3, N Items( colNameList ) )] ),
Freq( "None" ),
Weight( "None" ),
link to original data table( 0 ),
statistics column name format( "column" )
);