Aufteilen einer Datentabelle nach Spalten-IDHallo,
Ich habe eine große Datentabelle, in der die Spalten eine ID-Nummer haben, gefolgt von Wörtern wie unten,
| 1-Datum | 1-Parameter | 1-etwas | 2-etwas | 2-Datum | 2-Parameter | 3-Parameter | 3-Datum | 3-etwas | 3-sonst |
| | | | | | | | | | |
| | | | | | | | | | |
Mein ultimatives Ziel ist es, Kontrolldiagramme mit Datum als Musteretikett zu automatisieren. Es gibt keine einheitliche Anzahl von Spalten für jede ID und sie sind nicht nach aufsteigendem Datum sortiert.
Meine Idee ist, die große Datentabelle nach ID in kleinere aufzuteilen und dann Kontrolldiagramme daraus zu erstellen. Ich weiß jedoch nicht, wie ich diese Aufteilung automatisiert durchführen kann.
Vielen Dank
Betreff: Aufteilen einer Datentabelle nach Spalten-IDJims Lösung ist die allgemeinere Lösung, die ich erwähnt habe, wenn Ihre Tabelle kein regelmäßiges Spaltenmuster hat. Jums Antwort erschien erst, nachdem ich auf Post geklickt hatte.
Betreff: Aufteilen einer Datentabelle nach Spalten-IDKarl,
Wenn Ihre Spalte eine reguläre Serie von 3 ( Datum, Parametername, Datenwerte ) hat, können Sie dies über die Benutzeroberfläche mit Hauptmenü > Tabellen > Stapeln tun und einen Stapel mit mehreren Serien auswählen, 3, und Stapel für Zeile deaktivieren.Die Spaltennamen müssen ein wenig aufgeräumt werden, aber die resultierende Tabelle kann für Regelkarten verwendet werden, die den Parameternamen oder die Datengruppe als By-Variable verwenden.
Oder wenn Sie separate Tabellen wünschen, können Sie Table Subset für diese neue Tabelle verwenden, Subset By aktivieren und dann Data Group angeben.
Wenn Ihre Tabelle keine wiederholte Reihenreihenfolge hat, ist ein Skript oder viel manuelle Arbeit erforderlich, um jede Gruppe zu unterteilen. Antworten Sie auf diesen Beitrag, wenn Ihre Datentabelle eine unregelmäßige Spaltenreihenfolge aufweist.
Ich habe ein JSL-Skript angehängt, das für Ihre Tabelle funktionieren sollte, wenn es die wiederholten Serienspalten hat und alle Daten und alle Dinge denselben Modellierungstyp haben (wahrscheinlich numerisch, fortlaufend).
Names Default To Here(1);
dt = current data table();
cnames = dt << get column names("String");
stk = dt << Stack(
columns(
evalList(cnames)
),
Source Label Column( "Label" ),
Stacked Data Column( "Data" ),
Stack By Row( 0 ),
Number of Series( 3 )
);
stk:Data << Set Name("Date");
stk:Data 2 << Set Name("Parameter Name");
stk:Data 3 << Set Name("Data");
stk:Label << set each value( trim(word(1,:Label,"-")));
stk:Label << Set Name( "Data Group");
stk << delete columns(:Label 2, Label 3);
Betreff: Aufteilen einer Datentabelle nach Spalten-IDOhne weitere Einzelheiten kann ich nur eine ungefähre Anleitung geben, wie dies zu lösen ist.Ich sehe 2 Methoden, um nach dem zu suchen, was Sie brauchen.Die erste besteht darin, herauszufinden, wie viele verschiedene IDs es gibt, und die Spalte in die verschiedenen Listen für die IDs einzufügen, indem Sie etwa so vorgehen:
Names Default To Here( 1 );
dt = Current Data Table();
colNamesList = dt << get column names( string );
// Create an ID list
listOfIDs = {};
For( i = 1, i <= N Items( colNamesList ), i++,
If( Contains( listOfIDs, Word( 1, Column( dt, colNamesList[i] ) << get name, "-" ) ) == 0,
// Insert into the listOfIDs, the new ID name
Insert Into( listOfIDs, Word( 1, Column( dt, colNamesList[i] ) << get name, "-" ) );
// Create a list to hold the column names for the new ID
Eval( Parse( "listOfColumns_" || Char( N Items( listOfIDs ) ) || " = {};" ) );
Eval(
Parse(
"insert into(listOfColumns_" || Char( N Items( listOfIDs ) ) || "," || Char(
Column( dt, colNamesList[i] ) << get name
) || ");"
)
);
,
// If the ID has already been see, then just add the column name to the
// ID list of column names
Eval(
Parse(
"insert into(listOfColumns_" || Char(
Contains( listOfIDs, Word( 1, Column( dt, colNamesList[i] ) << get name, "-" ) )
) || "," || Char( Column( dt, colNamesList[i] ) ) << get name || ");"
)
)
)
);
Sie können dann die listOfIDs durchlaufen und Ihre Verarbeitung durchführen.
Die andere Methode wäre, alle Spalten zu stapeln und dann eine neue Spalte für die ID zu erstellen, die ID-Werte von den Beschriftungen zu entfernen und die Spalten dann wieder in gemeinsame Spalten aufzuteilen und Ihre Verarbeitung mit einer By-Anweisung durchzuführen, um die zu trennen verschiedene IDs.Etwas wie
Names Default To Here( 1 );
dt = Current Data Table();
colNamesList = dt << get column names( string );
// Stack the columns
dtStack = dt << Stack(
columns( colNamesList ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" ),
Drop All Other Columns( 1 )
);
// Create the ID Column
dtStack << New Column("ID", character,formula( word(1,:label,"-")));
// Now delete the ID from the :Label column
For Each Row(
:Label = trim(substr( :Label, contains(:Label,"-")+1));
);
// Split back to common columns
dtFinal = dtStack << Split(
Split By( :Label ),
Split( :Data ),
Sort by Column Property
);
Nun zu meiner Klarstellung ... wie ich bereits sagte, mache ich mit Ihren spärlichen Details viele Vermutungen darüber.Außerdem wurde der von mir bereitgestellte Code ohne eine Beispieldatentabelle nicht getestet, und ich gehe davon aus, dass er bei der ersten Ausführung nicht funktionieren würde.Es soll eine mögliche Richtung aufzeigen, in die Sie gehen können, um das Problem zu lösen