Problem mit geteilter Datentabelle<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ich habe ein Problem mit der Aufteilung einer Datentabelle und frage mich, ob jemand weiß, wie das geht. Meine Daten sehen so aus:

Die Daten sollten „Geteilt nach“ sein ID2 mit AUSWEIS ist die Gruppenvariable. Wenn ich es so mache, erhalte ich folgendes Ergebnis:

Das Problem ist, dass z AUSWEIS s 2 und 4 gibt es mehrere Werte von C in der Spalte ID2 . Anscheinend verwendet JMP immer den letzten Wert in der geteilten Datentabelle.
Gibt es eine automatische Möglichkeit, dies so zu tun, dass ich am Ende eine Tabelle wie die folgende erhalte?

Hier gibt es zwei Zeilen für die IDs 2 und 4, die die unterschiedlichen Werte von C in den Originaldaten darstellen.
Vielen Dank für Ihre Hilfe!
Sebastian
Betreff: Problem mit geteilter DatentabelleDanke msharp ,
es funktioniert großartig.
Und Sie schreiben: Die Dinge einfach zu halten ist wahrscheinlich der beste Weg.
Betreff: Problem mit geteilter DatentabelleIch würde mich generell von diesem Ansatz fernhalten, da statische Daten im Allgemeinen sicherer sind als dynamische Daten. Sie müssen sich fragen: Wie wichtig ist die Reihenfolge der Daten?Bei dieser Lösung bleiben die Schlüssel in Ordnung, die Werte können jedoch frei übertragen werden.ABER...
Diese Lösung funktioniert nur mit numerischen Spalten.Wenn wir :ID2 durch :ID2Num ersetzen würden, wobei A's = 1, B's =2 usw. Sie könnten einfach eine &-Anweisung verwenden, also :Sum( :ID[Index( 1, Row() )] == :ID & :ID2Num[Index( 1, Row() )] == :ID2Num ) für die Formel.
Wenn Sie Zeichenspalten haben, müssen Sie kreativer sein.Also für die Formel:
length(concat items(:ID2[Index( 1, Row() )],"")) - length(substitute(concat items(:ID2[Index( 1, Row() )],""), :ID2, ""))
oder
dt1 << New Column("Concat", Character, Nominal, Formula(:ID2 || char(:ID)));
dt1 << New Column("Repeat", Character, Nominal, Formula((length(concat items(:Concat[Index( 1, Row() )],"")) - length(substitute(concat items(:Concat[ Index( 1, Row() )],""), :Concat,"")))/2)); //die 2 am Ende gibt die Länge der verketteten Zeichenfolge an
Hier ist eine Menge los, und ich habe jetzt nicht die Energie, es zu erklären.Aber lassen Sie es mich wissen, wenn Sie Fragen haben. Wirklich, es gibt oben eine praktikablere, einfachere Lösung.
Betreff: Problem mit geteilter DatentabelleDanke msharp ,
Übrigens hat @ms in einem früheren Beitrag diese Formel für die Indizierung angeboten: :Sum( :ID[Index( 1, Row() )] == :ID ) @MS Habe diese Formel für die Indizierung angeboten :Sum( :ID[Index( 1, Row() )] == :ID )
Betreff: Syntax: Wie erstelle ich eine Indexspalte nach ID?
Gibt es eine Möglichkeit, es in diesem Zusammenhang zu verwenden? mit zwei Indexspalten und einer davon ist alphabetisch?
am besten,
Ron
Betreff: Problem mit geteilter DatentabelleIch kombiniere/fasse nur zusammen, was gesagt wurde. Stellen Sie sicher, dass Sie die Daten vorher sortieren, da sonst Probleme mit der Funktion Lag() auftreten.Außerdem ist die Verwendung einer Formel schneller als der Befehl for every row().Wenn Sie Bedenken haben, dass sich die Post-Sortierung später auf die Funktion lag() auswirken könnte, löschen Sie einfach die Formel, um Konflikte zu vermeiden.Daher:
NamesDefaultToHere ( 1 ) ;
// Tisch
dt1 = Neuer Tisch ( „Sebastian“ ,
Neue Spalte ( "AUSWEIS" ,
Numerisch ,
„Nominal“ ,
Format ( "Am besten" , 12 ) ,
Werte festlegen ( [ 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 4 , 4 , 4 , 4 , 2 , 2 ] )
) ,
Neue Spalte ( „ID2“ ,
Charakter ,
„Nominal“ ,
Werte festlegen (
{ "A" , "B" , "C" , "D" , "A" , "B" , "C" , "C" , "A" , "B" , "C" , "D" , "A" , "B" ,
"C" , "C" , "C" , "B" }
)
) ,
Neue Spalte ( "Wert" ,
Numerisch ,
„Nominal“ ,
Format ( "Am besten" , 12 ) ,
Werte festlegen (
[ 111 , 222 , 333 , 444 , 111 , 222 , 333 , 555 , 111 , 222 , 555 , 444 , 111 , 222 ,
555 , 666 , 777 , 888 ]
)
)
) ;
// Die Tabelle muss sortiert werden, damit die Formel im nächsten Schritt funktioniert
dt1 << Sortieren ( Tisch ersetzen ,
Von ( : AUSWEIS , : ID2 ) ,
Befehl ( Aufsteigend , Aufsteigend )
) ;
// Eine Hilfsspalte hinzufügen
dt1 << Neue Spalte ( "Wiederholen" ,
Numerisch ,
„Nominal“ ,
Format ( "Am besten" , 12 ) ,
Formel ( Wenn ( : ID2 != Verzögerung ( : ID2 , 1 ) | Reihe () == 1 , 1 , Verzögerung ( : Wiederholen , 1 ) + 1 ) )
) ;
: Wiederholen << Formel löschen ; // schneller als 'für jede Zeile()'
// Teilt
dt2 = dt1 << Teilt (
Geteilt nach ( : ID2 ) ,
Teilt ( : Wert ) ,
Gruppe ( : AUSWEIS , : Wiederholen )
) ;
// Löschen Sie a Hilfs- Spalte
dt2 << deleteColumn ( : Wiederholen ) ;
Betreff: Problem mit geteilter DatentabelleHi sebastianhoffmeister ,
Versuche dies:
dt = Neuer Tisch ( "Originale Daten" ,
Zeilen hinzufügen ( 16 ) ,
Neue Spalte ( "AUSWEIS" ,
Numerisch ,
Kontinuierlich ,
Format ( "Am besten" , 12 ) ,
Werte festlegen ( [ 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 4 , 4 , 4 , 4 ] )
) ,
Neue Spalte ( „ID2“ ,
Charakter ,
Nominell ,
Werte festlegen (
{ "A" , "B" , "C" , "D" , "A" , "B" , "C" , "C" , "A" , "B" , "C" , "D" , "A" , "B" ,
"C" , "C" }
)
) ,
Neue Spalte ( "Wert" ,
Numerisch ,
Kontinuierlich ,
Format ( "Am besten" , 12 ) ,
Werte festlegen (
[ 111 , 222 , 333 , 444 , 111 , 222 , 333 , 555 , 111 , 222 , 555 , 444 , 111 , 222 ,
555 , 666 ]
)
)
) ;
// Die Tabelle muss sortiert werden, damit die Formel im nächsten Schritt funktioniert
dt << Sortieren ( Tisch ersetzen ,
Von ( : AUSWEIS , : ID2 ) ,
Befehl ( Aufsteigend , Aufsteigend )
) ;
// Einen neuen Index einführen, der die Duplikate erkennt
dt << neue Kolumne ( „ID3“ ) ;
Für jede Reihe ( Wenn ( // Verwenden Sie in der Spalte keine Formel, da diese von der Sortierung abhängt, die sich später ändern kann.
Reihe () == 1 , ID3 =: AUSWEIS ,
: AUSWEIS != Verzögerung ( : AUSWEIS , 1 ) | : ID2 != Verzögerung ( : ID2 , 1 ) , ID3 = : AUSWEIS ,
ID3 = Verzögerung ( : ID3 , 1 ) + 1
)) ;
// Jetzt können Sie die Tabelle teilen
sortiert = dt << Teilt (
Geteilt nach ( : ID2 ) ,
Teilt ( : Wert ) ,
Gruppe ( : ID3 , : AUSWEIS ) ,
Ausgabetabelle ( „Split Table“ )
) ;
am besten,
Ron
Betreff: Problem mit geteilter DatentabelleHoppla! Entschuldigung, ja, Sebastian. Vielleicht so etwas wie?
// Eine Hilfsspalte hinzufügen
Warten ( 3 ) ;
dt1 << Neue Spalte ( "Wiederholen" ,
Numerisch ,
„Nominal“ ,
Format ( "Am besten" , 12 ) ,
Formel ( Wenn ( : ID2 != Verzögerung ( : ID2 , 1 ) | Reihe () == 1 , 1 , Verzögerung ( : Wiederholen , 1 ) + 1 ) )
) ;
Betreff: Problem mit geteilter DatentabelleDanke für die Unterstützung, Ian!
Das war mehr oder weniger das, was ich tat. Das Problem in der realen Welt ist natürlich, dass der Datensatz ca. 3.000 Zeilen hat und ich mir keine Formel vorstellen kann, um die Wiederholungsspalte automatisch statt manuell zu erstellen.
Kennt ihr dafür auch eine Lösung? Ich möchte vermeiden, ein Skript zu schreiben, das mehrere For-Schleifen verschachtelt, um die „Wiederholungs“-Spalte zu generieren. Das klingt so ineffizient.
Danke,
Sebastian
Betreff: Problem mit geteilter DatentabelleIch glaube, du brauchst eine Hilfskolonne, Sebastian.
NamesDefaultToHere ( 1 ) ;
// Tisch
dt1 = Neuer Tisch ( „Sebastian“ ,
Zeilen hinzufügen ( 16 ) ,
Neue Spalte ( "AUSWEIS" ,
Numerisch ,
„Nominal“ ,
Format ( "Am besten" , 12 ) ,
Werte festlegen ( [ 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 4 , 4 , 4 , 4 ] )
) ,
Neue Spalte ( „ID2“ ,
Charakter ,
„Nominal“ ,
Werte festlegen (
{ "A" , "B" , "C" , "D" , "A" , "B" , "C" , "C" , "A" , "B" , "C" , "D" , "A" , "B" ,
"C" , "C" }
)
) ,
Neue Spalte ( "Wert" ,
Numerisch ,
„Nominal“ ,
Format ( "Am besten" , 12 ) ,
Werte festlegen (
[ 111 , 222 , 333 , 444 , 111 , 222 , 333 , 555 , 111 , 222 , 555 , 444 , 111 , 222 ,
555 , 666 ]
)
)
) ;
// Eine Hilfsspalte hinzufügen
Warten ( 3 ) ;
dt1 << Neue Spalte ( "Wiederholen" ,
Numerisch ,
„Nominal“ ,
Format ( "Am besten" , 12 ) ,
Werte festlegen ( [ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 2 ] )
) ;
// Teilt
dt2 = dt1 << Teilt (
Geteilt nach ( : ID2 ) ,
Teilt ( : Wert ) ,
Gruppe ( : AUSWEIS , : Wiederholen )
) ;
// Hilfsspalte löschen
Warten ( 3 ) ;
dt2 << deleteColumn ( : Wiederholen ) ;