Transponierung von WIDE nach LONG und eine FormelfrageHallo, zwei irgendwie verwandte Fragen
Ich habe SPLIT verwendet, um eine lange Datei in eine breite Datei umzuwandeln, aber ich habe eine etwas kompliziertere Situation, in der ich eine breite Datei in eine lange Datei STACKEN/transponieren möchte.
Ich habe einen Datensatz mit einer eindeutigen Betreff-ID und dann mehreren hundert Spalten/Variablen. Die Variablennamen sind genau die gleichen, mit der Ausnahme, dass Jahr 1 mit „2“, Jahr 2 mit „3“ usw. endet. Gibt es eine relativ einfache Möglichkeit, diese Datei lang zu machen, sodass es eine Zeitvariable (1, 2,3,4) und die Variablennamen stehen dort nur einmal ohne Nummer am Ende?
Gibt es in einem solchen Datensatz eine Möglichkeit, eine Formel in JMP zu erstellen, die für alle XXX hundert Spalten angibt, das # (z. B. 1, 2) vom Ende zu entfernen? Spalten-/Variablenname? Natürlich könnte ich das manuell machen, aber es würde ewig dauern.
Vielen Dank!
Datenmischung und -bereinigungBetreff: Transponierung von WIDE nach LONG und eine FormelfrageIch werde Sie durch die Erstellung der gestapelten Datentabelle unter Verwendung der folgenden Datentabelle führen

Gehe zu
Tabellen=>Stapel
Füllen Sie das Dialogfenster aus, indem Sie alle Spalten, die Sie stapeln möchten, in das Auswahlfeld „Stapelspalten“ platzieren.

Es wird eine Tabelle erstellt, die so aussieht

Erstellen Sie in der Datentabelle eine neue Spalte mit dem Namen „Spaltenname“.

Klicken Sie mit der rechten Maustaste auf die Spaltenüberschrift für die Spalte „Spaltenname“ und wählen Sie „Formel“ aus

Es muss eine Formel angegeben werden, die alles vor den Zahlen am Ende der Werte in der Spaltenbezeichnung übernimmt und diesen als Spaltennamenwert behält.Abhängig von den tatsächlichen Daten kann dies also auf verschiedene Arten erfolgen.In unserem Beispiel findet die Formel alles, bevor Zahlen sichtbar sind, und verwendet dies als Wert für den Spaltennamen.
Die Formel findet das erste Wort in der Spalte „:Label“ und stoppt, sobald ein numerischer Wert „0123456789“ gefunden wird.

Das Ergebnis ist

Erstellen Sie nun eine weitere neue Spalte und nennen Sie sie „Jahr“.In diesem Fall möchten wir das letzte Zeichen in der Spalte als Wert der Jahresformel verwenden

Damit erhalten Sie Ihre endgültige Datentabelle

Was das Umbenennen der Spalten betrifft, kenne ich keine interaktive Möglichkeit, dies interaktiv zu tun.Daher denke ich, dass Sie das Skript ausführen müssen, das ich zuvor bereitgestellt habe
Betreff: Transponierung von WIDE nach LONG und eine FormelfrageIch freue mich sehr über Ihre Antwort.Wenn ich mich recht erinnere, haben Sie mir letztes Jahr auch bei einer Frage geholfen.
Leider kenne ich mich mit JMP-Skripten nicht aus, nur mit Zeigen und Klicken.Und selbst wenn ich es herausfinden könnte, müsste ich diesen Code für jede Variable ausführen, da ich viele Variablen habe, nicht wahr?
Betreff: Transponierung von WIDE nach LONG und eine FormelfrageHier ist ein Skript, das eine gestapelte Datentabelle mit 3 Spalten generiert

Hier ist ein Skript, das die numerische Zahl vom Ende der Spalten in einer Datentabelle entfernt.Denken Sie daran: Wenn das Endergebnis beim Umbenennen von Spalten ein Spaltenname ist, der mit dem Namen einer vorherigen Spalte übereinstimmt, fügt JMP einen numerischen Wert hinzu, um den neuen Spaltennamen zu einem eindeutigen Namen zu machen
Names Default To Here( 1 );
dt = Current Data Table();
For( i = 1, i <= N Cols( dt ), i++,
if(
is missing(
Num(
word(
-1,
Lowercase( Column( dt, i ) << get name )
,
"abcdefghijklmnopqrstuvwxyz;:, -_)(")
)
) == 0,
Column( dt, i ) <<
set name(
substr(
Column(dt,i)<<GET name=""></GET>
Names Default To Here( 1 );
dt = new table( "Example",
add rows( 10 ),
New Column( "Year2", formula( Random Integer( 1, 100 ) ) ),
New Column( "Year3", formula( Random Integer( 1, 100 ) ) ),
New Column( "Year4", formula( Random Integer( 1, 100 ) ) )
);
dtStack = Data Table( "Example" ) << Stack(
columns( :Year2, :Year3, :Year4 ),
Source Label Column( Column ),
Stacked Data Column( "Data" )
);
dtStack << New Column( "Year",
formula(
Num(
Word(
-1,
Lowercase( :Column ),
"abcdefghijklmnopqrstuvwxyz;:, -_)("
)
)
)
);
dtStack:Year << delete formula;
for each row(
:Column = substr(
:Column,
1,
Length( :Column ) - Length(
Word(
-1,
Lowercase( :Column ),
"abcdefghijklmnopqrstuvwxyz;:, -_)("
)
)
)
);