Wie transponiere ich Daten vom Lang- ins Breitformat?Ich bin ein neuer JMP-Benutzer.
Meine Daten liegen derzeit im Langformat vor. Mit anderen Worten: Probanden verfügen jeweils über mehrere Datenzeilen. Für die Überlebensanalyse benötige ich jedoch, dass die Daten im Breitformat vorliegen – 1 Datenzeile pro Proband. Wenn ich versuche, „Transpose“ zu verwenden, meldet mir JMP „Transponierung nicht möglich.“ „Datenspalten haben unterschiedliche Datentypen“. Die Variablen sind eine Mischung aus kontinuierlichen und nominalen Variablen. Also, wie soll ich das machen? Ich konnte problemlos einen anderen Datensatz von „Wide“ in „Long“ konvertieren, aber das Gegenteil scheint mir nicht zu gelingen.
Aktuelle Daten werden wie folgt aufgebaut (Fake-Daten):
ID Var1 Var2 Ergebnis
001 1 1 0
001 1 1 0
001 1 0 1
002 0 1 0
002 0 1 1
003 1 1 0
Ich möchte es so haben:
ID Var1_time1 Var2_time1 Var1_time2 Var2_time2.... Ergebnis_timex
001 1 1 1 1 1
002 0 1 0 1 1
003 1 1 . . 0
Danke!
Betreff: Wie transponiere ich Daten vom Lang- ins Breitformat?Danke, Jeff! Das hat funktioniert!Betreff: Wie transponiere ich Daten vom Lang- ins Breitformat?@ron_horne hat die richtige Lösung, aber vielleicht helfen ein paar Bilder.
Tabellen -> Teilen ordnet die Daten nach Ihren Wünschen neu an, erfordert jedoch eine Spalte, die die neuen Spalten identifiziert. In Ihrem Fall möchten Sie Spalten für jede Zeile innerhalb der ID erstellen, sodass Sie eine Spalte benötigen, die Zeilen innerhalb der ID zählt.@ron_horne nannte diese Kolumne Index .
Sie müssen außerdem sicherstellen, dass Ihre Daten sortiert sind AUSWEIS damit das funktioniert.
Hier sind die Daten, die Sie in Ihrem ersten Beitrag in Form einer JMP-Datentabelle präsentiert haben.

Zu diesen Daten müssen wir hinzufügen Index Spalte.@ron_horne hat für seine Indexspalte eine andere Formel verwendet, aber mir gefällt etwas, das etwas einfacher ist.

Die obige Formel lautet:
If( :ID != Lag( :ID, 1 ), 1, Lag( :Index, 1 ) + 1)
In der Prosa bedeutet dies, dass, wenn der ID-Wert in der aktuellen Zeile nicht mit der ID in der vorherigen Zeile übereinstimmt (d. h Verzögerung ( :ID, 1) ) Geben Sie dann eine 1 ein Index Spalte, andernfalls nehmen Sie den Wert der Index Spalte aus der vorherigen Zeile (d. h Verzögerung (:Index, 1) )
Wie Sie sehen können, ist die Index Die Spalte in der Datentabelle zählt nun die darin enthaltenen Zeilen AUSWEIS .

Jetzt können wir es verwenden Tabellen->Split deine zu spalten Var1 , Var2 Und Ergebnis Spalten nach Index und gruppieren Sie die Zeilen nach AUSWEIS .

Dadurch erhalten Sie diese Datentabelle, die meiner Meinung nach genau das ist, was Sie wollen. Es gibt neue Spalten für jede Zeile innerhalb der ID und eine Zeile pro ID.

Es könnte einfacher sein, ein einfacheres Beispiel zu sehen, in dem wir die Spalte „Teilen nach“ nicht erstellen müssen. Hier ist ein Video, das das zeigt.
Lassen Sie mich wissen, wenn ich das Ziel verfehlt habe oder Sie immer noch verwirrt sind.
Betreff: Wie transponiere ich Daten vom Lang- ins Breitformat?Letzte Möglichkeit,
1) Der erste Befehl erstellt lediglich eine Originaldatenquelle im Langformat.
2) Der zweite Befehl führt einen Index für die Nummer des Ereignisses für jede ID ein. Die Anzahl der Ereignisse muss nicht für jede ID gleich sein. Wenn jedoch einige IDs weniger Ereignisse aufweisen, fehlen im breiten Tabellenformat Werte.
3) Der dritte Befehl nutzt die Index- und ID-Spalten, um die Tabelle so aufzuteilen, wie Sie es gewünscht haben. eine Spalte für jedes Ereignis und jede Variable und jede Zeile repräsentiert nur eine ID.
Für Ihre Daten müssen Sie nur die letzten beiden Befehle ausführen.
names default to here(1);
// source data table
dt = New Table( "Long",
Add Rows( 7 ),
New Column( "ID",
Numeric,
Continuous,
Format( "Best", 5 ),
Set Values( [1, 1, 1, 2, 2, 3, 3] )
),
New Column( "Var1",
Numeric,
Continuous,
Format( "Best", 12 ),
Set Values( [1, 1, 1, 0, 0, 1, 1] )
),
New Column( "Var2",
Numeric,
Continuous,
Format( "Best", 12 ),
Set Values( [1, 1, 0, 1, 1, 1, 0] )
),
New Column( "Outcome",
Numeric,
Continuous,
Format( "Best", 12 ),
Set Values( [0, 0, 1, 1, 1, 0, 0] )
)
);
// add index column for spliting - no need to sort the table first
dt << new column ("index", formula(Sum( :ID[Index( 1, Row() )] == :ID ) ) );
// now split by index and group by ID
dt << Split(
Split By( :index ),
Split( :Var1, :Var2, :Outcome ),
Group( :ID ),
Output Table( "Wide" )
);
Betreff: Wie transponiere ich Daten vom Lang- ins Breitformat?Dieser Code gab mir 2 Tabellen. Die erste hieß „Quelle“ und hatte nur 10 Datenzeilen und 5 Spalten. Die ID-Spalte reicht von 1 bis 4 (nicht meine IDs) und die ID erscheint in drei Zeilen. Ich weiß nicht wirklich, was das bewirken sollte. Alle Daten sind binär, sogar meine Datumsvariablen. Die zweite Tabelle „ohne Titel“ hatte 4 Datenzeilen und 4 Spalten. Die ID geht von 1 bis 4 in den Zeilen weiter und die Spalten sind alle als fehlend gekennzeichnet.
Ich glaube nicht, dass dies das ist, was ich will.
Betreff: Wie transponiere ich Daten vom Lang- ins Breitformat?Wenn Sie das gesamte Skript so ausgeführt haben, wie es ist, und das Ergebnis Ihren Wünschen entspricht, können Sie es mit nur wenigen Klicks in Ihrem Datensatz reproduzieren.
1) Fügen Sie eine neue Spalte hinzu und nennen Sie sie „Index“.
2) Setzen Sie die Formel wie folgt: Sum( :ID[Index( 1, Row() )] == :ID )
3) Tabellen >> Teilen und füllen Sie sie entsprechend.

Klicken Sie auf OK und Sie sollten fertig sein.
Am besten,
Ron
Betreff: Wie transponiere ich Daten vom Lang- ins Breitformat?OK, ich bin neu bei JMP und habe noch nie JSL verwendet, obwohl ich viel in SPSS, SAS und einigen anderen programmiert habe. Ich folge in diesem Beispiel überhaupt nicht dem Skript, insbesondere den „Sollwerten“. Ich denke, der nächste Befehlsblock besteht darin, neue Indexvariablen für die Gruppierung vor der Aufteilung zu erstellen.
Ich habe ein paar Variablen erstellt, als ich in einem anderen Datensatz von breit nach lang wechselte, aber in diesem Fall hatte jedes Subjekt die gleiche Anzahl an Beobachtungen.
Betreff: Wie transponiere ich Daten vom Lang- ins Breitformat?Tut mir leid, dass ich es nicht vorher noch einmal überprüft habe.
Versuche Folgendes
Namen werden standardmäßig hier angezeigt ( 1 ) ;
// Quelldatentabelle
dt = Neue Tabelle ( "Quelle",
Zeilen hinzufügen ( 10 ) ,
Neue Spalte ( "AUSWEIS ",
Numerisch,
Kontinuierlich,
Format ( "Am besten", 5 ) ,
Werte festlegen ( [ 1 , 1 , 1 , 2 , 2 , 3 , 3 , 4 , 4 , 4 ] )
) ,
Neue Spalte ( „Var1“,
Numerisch,
Kontinuierlich,
Format ( "Am besten", 12 ) ,
Werte festlegen ( [ 1 , 1 , 1 , 0 , 0 , 1 , 1 , 0 , 1 , 0 ] )
) ,
Neue Spalte ( „Var2“,
Numerisch,
Kontinuierlich,
Format ( "Am besten", 12 ) ,
Werte festlegen ( [ 1 , 1 , 0 , 1 , 1 , 1 , 0 , 1 , 1 , 0 ] )
) ,
Neue Spalte ( "Ergebnis",
Numerisch,
Kontinuierlich,
Format ( "Am besten", 12 ) ,
Werte festlegen ( [ 0 , 0 , 1 , 1 , 1 , 0 , 0 , 1 , 1 , 1 ] )
)
) ;
// Indexspalte zum Teilen hinzufügen – die Tabelle muss nicht zuerst sortiert werden
dt << neue Kolumne ( „Index“, Formel ( Summe ( :AUSWEIS [ Index ( 1 , Reihe () )] == :ID ) ) ) ;
// jetzt nach Index aufgeteilt und nach ID gruppiert
dt << Teilt (
Geteilt nach ( :Index ) ,
Teilt ( :Var1, :Var2, :Ergebnis ) ,
Gruppe ( :AUSWEIS )
) ;
Betreff: Wie transponiere ich Daten vom Lang- ins Breitformat?Ich bin mir nicht sicher, was dann passiert. Die Daten sind nach ID sortiert. Wenn ich nach ID teile und meine Variablen als „geteilte Spalten“ verwende, erhalte ich am Ende 14 Datenzeilen und eine Spalte für jede Kombination aus ID und Variable.
Ich versuche Folgendes zu bekommen:
ID Besuch1 Besuch 2 .... Besuch13 Ergebnis1 Ergebnis2 ... Ergebnis 13
001 9/13 10/20 ... 3/2 0 0 ... 1
002 7/04 8/12 ... 12/5 0 1 ... 1
Was ich bekomme, ist
Datum1-ID001 Datum1-ID002
Zeile 1 13.09. 04.07
Zeile2 10/20 8/12
Danke,
Joe
Betreff: Wie transponiere ich Daten vom Lang- ins Breitformat?
Ups.....Ich denke, Sie können das Problem lösen, wenn Sie die Gruppe verwenden und dort auch Ihre ID-Spalte platzieren
Wenn Ihre Daten nach ID sortiert sind (alle Daten für eine bestimmte ID sind zusammen). Wenn nicht sortiert, gehen Sie zu Tabellen==>Sortieren und sortieren Sie die Daten nach ID. Wenn Sie es dann als Spalte „Teilen nach“ und „Var1, Var2, Ergebnis“ als „Spalten teilen“ auswählen, erhalten Sie eine Datentabelle mit einer Zeile pro Wert der Spalte „Teilen nach“ und dann Var1 001, Var1 002 ......Var1 013, Var2 001, Var2 002.......Var2 013, Ergebnis 001, Ergebnis 002......Ergebnis 013.
Angesichts der Tatsache, dass Sie bis zu 13 Ebenen haben können.
Betreff: Wie transponiere ich Daten vom Lang- ins Breitformat?Danke, Ron, aber ich mache keine einfachen Zusammenfassungen. Ich arbeite an einer Überlebensanalyse. Mein erster Schritt besteht darin, die Daten in ein Breitformat zu übertragen.
JoeBetreff: Wie transponiere ich Daten vom Langformat ins Breitformat?Danke, Jim. Das hat teilweise funktioniert. Anstatt jedoch eine Zeile für jede Objekt-ID (n=15.000) zu erhalten, hatte ich am Ende 14 Datenzeilen und an jeden Variablennamen wurde die SubjectID angehängt.
Meine Daten sind organisiert SubjectID. Dabei können Probanden für jeden Besuch mehrere Datenzeilen (Behandlungscodes) haben. Im Langformat gibt es 1–13 Datenzeilen pro Betreff.
Sollten mehrere „Split by“-Variablen verwendet werden? Sollte „Gruppieren nach“ verwendet werden?
Danke,
Joe
Betreff: Wie transponiere ich Daten vom Lang- ins Breitformat?Jim hat recht. Wenn Sie dies jedoch nur tun, um Zusammenfassungen der Daten pro ID zu erstellen, können Sie sich diesen Schritt sparen, indem Sie Tabellen >>> Zusammenfassung verwenden.
am besten,
Ron
Betreff: Wie transponiere ich Daten vom Lang- ins Breitformat?Was Sie tun möchten, ist zu verwenden
Tabellen==>Geteilt
Sie können nach ID teilen und var1, var2 und Ergebnis als geteilte Spalten angebenRe: How do I Transpose data from Long to Wide format?Hello Jeff,
Thank you for this explanation it was helpful but I have a quick question:
Current sorting: Each variable is listed with its corresponding event identifier.
Desired sorting: I want all variables for the first event to be grouped together, followed by all variables for the second event, and so on. Within each event group, I want the variables sorted by their names.
Original: var1_1 var1_2 var1_3 var2_1 var2_2 var2_3 var3_1 var3_2 var3_3<BR />Desired: var1_1 var2_1 var3_1 var1_2 var2_2 var3_2 var1_3 var2_3 var3_3<BR /><BR /><FONT color="#000000">Is there a way to do that ?</FONT>
Betreff: Wie transponiere ich Daten vom Lang- ins Breitformat?Ich weiß, dass das ein alter Thread ist, aber ich habe eine Frage. Das hat bei mir funktioniert, außer dass beim Versuch, die Indexspalte zu erstellen, diese für die erste ID leer ist. So sieht es aus.
Weiß jemand, woran das liegen könnte?

Betreff: Wie transponiere ich Daten vom Lang- ins Breitformat?Hier ist ein Ansatz, um das zu bekommen, was Sie wollen
If( Row() == 1,
theVal = 1,
If( Lag( :yourColumn ) != :yourColumn,
theVal
++)
);
theVal;
Betreff: Wie transponiere ich Daten vom Lang- ins Breitformat?Hallo,
Wo soll ich diese Formel einfügen? In derselben Indexspalte? Muss ich „yourColumn“ in etwas anderes ändern?
Betreff: Wie transponiere ich Daten vom Lang- ins Breitformat?Die von mir angegebene Formel würde in die Indexspalte eingefügt.
„Ihre Spalte“ muss in den Namen der Spalte geändert werden, deren Wert der Indexspalte erhöht werden soll, wenn die Spalte geändert wird.