Hallo,
Ich habe folgendes Problem:
a) Ich generiere eine Tabelle (nenne sie Tabelle dt) mit mehreren Spalten. Ich bin jedoch daran interessiert, nur ein bestimmtes Muster (z. B. "ABC @ XYZ") in den Spaltennamen zusammen mit zwei anderen Spalten (z. B. "LCOL", "WCOL") zu betrachten. Ich generiere diese Tabelle. (Aufruf dieser Tabelle dtB)
Nächster
b) Ich verwende die Tabelle dtB, ziehe ihre Spalte und verwende eine for-Schleife, um eine Übersichtstabelle für jede solche Spalte zu generieren, die dem Muster in Col Name entspricht.
c) Ich habe eine leere Tabelle dt_sum_all erstellt
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 zu erhalten. (Ich bekomme N Tabellen für N solche Spalten, wenn ich die neue Tabelle nicht benutze, aber das ist nicht was ich will - Ich möchte 1 Tisch )
e ) Auch am Ende, wenn ich eine einzelne Tabelle habe, möchte ich die Spalten umbenennen (normalerweise wird SUM am Anfang jeder Spalte angehängt), wie SUM ( ABC @ XYZ_1AS ) bis ABC @ XYZ_1AS . Da ich viele Spalten habe, möchte ich dies in einer Schleife oder ähnlichem tun.
Was ich bis jetzt habe, ist das Folgende:
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 = New Table();
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);
);
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 keine Tabelle. Kann mir bitte jemand helfen.
Wenn ich Ihren Code richtig lese, möchten Sie am Ende eine Datentabelle mit Zusammenfassungsdaten für eine Reihe von Spalten erhalten, die mit einem Muster in der ursprünglichen Datentabelle übereinstimmen.
Ich glaube, Sie haben viel härter gearbeitet als nötig. Im Folgenden finden Sie ein Beispielskript, das den größten Teil Ihres Codes verwendet, jedoch an der Beispieldatentabelle für die Halbleiterfähigkeit arbeitet, in der die Namen der Los- und Waferspalten lot_id und wafer und nicht Lcol und Wcol sind. Ich habe die dtB-Datentabelle entfernt, da sie, sofern Sie sie nicht für etwas später im Skript benötigen, sicherlich nicht erstellt werden muss, um dann zusammenfassende Daten dafür zu erstellen. Die Zusammenfassungsdaten können direkt aus der ursprünglichen Datentabelle stammen. Es ist auch nicht erforderlich, jede Spalte einzeln zusammenzufassen. Alle Spalten können einfach auf einmal zusammengefasst werden. Daher muss kein Updatie ausgeführt werden. Schließlich gibt es in der Zusammenfassungsplattform eine Option, mit der die Spaltennamen denselben Namen wie der Name der Eingabespalte erhalten, sodass die Spalten in der Übersichtstabelle nicht umbenannt werden müssen.
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" )
);