Extrahieren Sie Zahlen unterschiedlicher Länge aus einer Zeichenfolge in verschiedene SpaltenIch habe eine Spalte mit dem Namen „Dauer“ mit Werten, die die Anzahl der Tage, Stunden, Minuten und Sekunden darstellen. Das letzte m bezeichnet Sekunden.
Das typische Format wäre also: (0-365)d(0-24)h(0-60)m(0-60)m
Hier sind einige Beispiele.:
0d 15h 47m 43m
10d 10h 21m 54m
0d 04h 07m 32m
268d 06h 02m 33m
Ich muss die Anzahl der Tage, Stunden, Minuten und Sekunden in verschiedenen Spalten extrahieren, damit ich Berechnungen durchführen kann.
Ich habe die Formel zum Extrahieren der Anzahl der Tage ausprobiert,
Words( :Duration, "d" )[1]
Um die zweite Zahl zu extrahieren, habe ich die Formel verwendet:
Substr( Item( 2, :Duration ), 1, 2 );
Extrahieren Sie auf die gleiche Weise die dritte und vierte Zahl mit 3 und 4 in der Item-Formel.
Um diese Zeichenfolgen in numerisch umzuwandeln, habe ich vier weitere Spalten erstellt, den Datentyp kopiert, eingefügt und in numerisch geändert.
Ich verstehe, dass dies ein Umweg ist, um zum Ergebnis zu gelangen.
Ich habe mich gefragt, ob mir jemand auf eine effizientere Weise helfen könnte.
Erweiterte statistische ModellierungVerbraucher- und MarktforschungDatenzugriffVersuchsplanungMassenanpassungQualitäts- und VerfahrenstechnikErgebnisse teilen und kommunizierenBetreff: Extrahieren Sie Zahlen unterschiedlicher Länge aus einer Zeichenfolge in verschiedene SpaltenVielen Dank für den Hinweis auf das Protokoll. Ich habe das Ergebnis dort gesehen. Bisher dachte ich, dass das Ergebnis in einem separaten Fenster angezeigt wird.
Betreff: Extrahieren Sie Zahlen unterschiedlicher Länge aus einer Zeichenfolge in verschiedene SpaltenMarkieren
Ich hatte den Eindruck, dass das Ergebnis in einem separaten Fenster angezeigt wird. Jetzt habe ich in das Protokoll geschaut – und dort das Ergebnis gesehen – so oft, wie ich das Skript ausgeführt hatte.
Betreff: Extrahieren Sie Zahlen unterschiedlicher Länge aus einer Zeichenfolge in verschiedene Spalten@txnelson ist richtig. Er hat Ihnen gezeigt, wie Sie es als separates Skript verwenden. Dieser Ausdruck ist alles, was Sie für eine Spaltenformel benötigen:
Num( Regex( cell[i], "(\d+)d (\d+)h (\d+)m (\d+)m", "\1" ) )
Betreff: Extrahieren Sie Zahlen unterschiedlicher Länge aus einer Zeichenfolge in verschiedene Spalten@Mark_Bailey Das Skript ist eine eigenständige JSL.Sie führen es aus, indem Sie es in ein Skriptfenster einfügen und das Skript ausführen.Ich habe das gemacht und es hat großartig funktioniert und die folgenden Ergebnisse im JMP-Protokoll angezeigt
day = 0;
day = 10;
day = 0;
day = 268;
Betreff: Extrahieren Sie Zahlen unterschiedlicher Länge aus einer Zeichenfolge in verschiedene SpaltenMarkieren,
Ich habe versucht, Ihr Skript auf viele verschiedene Arten zu verwenden
a) indem Sie das Skript im Skripteditor verwenden und ausführen,
b) Erstellen einer Spalte mit dem Namen „Zelle“ und Eingeben der Liste der darin enthaltenen Elemente + Erstellen einer weiteren Spalte „Tag“ und Verwenden der „for-Schleife“ als Formel in dieser Spalte,
und auf andere Weise.
Ich erhalte eine Fehlermeldung.
Ich habe auch versucht, im Skriptindex nach Hilfe zu suchen.
Aber ich bekomme das Skript nicht zum Laufen.Ich bin neu im Scripting. Können Sie bitte helfen.
Betreff: Extrahieren Sie Zahlen unterschiedlicher Länge aus einer Zeichenfolge in verschiedene SpaltenBisher haben Sie einige gute Lösungen erhalten, aber ich möchte darauf hinweisen, dass Sie mit der Verwendung des sehr nah dran waren Wörter() Funktion.
Sie können im letzten Argument der Funktion Words() mehr als ein Trennzeichen angeben, sodass Sie Folgendes tun können:
vals={"0d 15h 47m 43m", "10d 10h 21m 54m","0d 04h 07m 32m", "268d 06h 02m 33m"};
for (i=1, i<=nitems(vals), i++,
show(words(vals[i], "dhm ")) //use "d" "h" "m" and a space as delimiters
);
Im Protokoll:
/*:
Words(vals[i], "dhm ") = {"0", "15", "47", "43"};
Words(vals[i], "dhm ") = {"10", "10", "21", "54"};
Words(vals[i], "dhm ") = {"0", "04", "07", "32"};
Words(vals[i], "dhm ") = {"268", "06", "02", "33"};
Hier ist es im Formeleditor, zusammen mit dem In Days(), In Hours(), In Minutes() Funktionen um die numerischen Werte in die Anzahl der Sekunden in jeder dieser Einheiten umzuwandeln und eine Spalte „Dauer“ zu erstellen.

Die Datentabelle habe ich auch hier angehängt.
Dieses Thema kombiniert zwei meiner Lieblingsfunktionen, die Funktion Word() (oder Words()) sowie Datums- und Uhrzeitangaben. Hier sind Beiträge, die ich geschrieben habe und die jeden einzelnen erklären:
Wenn Sie nur eine Funktion des Formeleditors erlernen, ist Word() die richtige
Verwenden von Datums-, Uhrzeit-, Datums- und Zeitangaben in JMP
Betreff: Extrahieren Sie Zahlen unterschiedlicher Länge aus einer Zeichenfolge in verschiedene SpaltenPaul: Ich habe eine neue Funktion gelernt. Vielen Dank für Ihre detaillierte und vereinfachte Version der Lösung.!
Betreff: Extrahieren Sie Zahlen unterschiedlicher Länge aus einer Zeichenfolge in verschiedene SpaltenPerfekt. Vielen Dank für Ihre Beschreibung und Screenshots. In anderen Fällen habe ich durch die Verwendung von Recode Zeit gespart.
Betreff: Extrahieren Sie Zahlen unterschiedlicher Länge aus einer Zeichenfolge in verschiedene SpaltenVerwenden Sie „Recode –Formelspalte“ – und wählen Sie unter dem Hotspot „Neue Werte“ die Option „Erweitert – Segment extrahieren“ aus. Screenshots zum Extrahieren der d-, s- und jmp-Datei mit gespeicherter Formel für Tag, Stunde und Sekunde im Anhang.


Betreff: Extrahieren Sie Zahlen unterschiedlicher Länge aus einer Zeichenfolge in verschiedene SpaltenDieses Beispiel veranschaulicht die Verwendung regulärer Ausdrücke.
Names Default To Here( 1 );
cell = {"0d 15h 47m 43m", "10d 10h 21m 54m", "0d 04h 07m 32m", "268d 06h 02m 33m"};
For( i = 1, i <= N Items( cell ), i++,
day = Num( Regex( cell[i], "(\d+)d (\d+)h (\d+)m (\d+)m", "\1" ) );
Show( day );
);Betreff: Extrahieren Sie Zahlen unterschiedlicher Länge aus einer Zeichenfolge in verschiedene SpaltenBeigefügte Beispieltabelle.
Betreff: Extrahieren Sie Zahlen unterschiedlicher Länge aus einer Zeichenfolge in verschiedene SpaltenWie wäre es mit Regex:
Für den Tag:
Num( Regex( :Duration, "(\d+)d\s(\d+)h\s(\d+)m\s(\d+)m", "\1" ) )
Für die Stunde:
Num( Regex( :Duration, "(\d+)d\s(\d+)h\s(\d+)m\s(\d+)m", "\2" ) )
Für die Minute:
Num( Regex( :Duration, "(\d+)d\s(\d+)h\s(\d+)m\s(\d+)m", "\3" ) )
Zum Zweiten:
Num( Regex( :Duration, "(\d+)d\s(\d+)h\s(\d+)m\s(\d+)m", "\4" ) )
Jede Zahl befindet sich in einer Erfassungsgruppe, obwohl Sie die anderen nicht wirklich erfassen müssen. Sie könnten es folgendermaßen vereinfachen:
Num( Regex( :Duration, "(\d+)d\s\d+h\s\d+m\s\d+m", "\1" ) )
Num( Regex( :Duration, "\d+d\s(\d+)h\s\d+m\s\d+m", "\1" ) )
Num( Regex( :Duration, "\d+d\s\d+h\s(\d+)m\s\d+m", "\1" ) )
Num( Regex( :Duration, "\d+d\s\d+h\s\d+m\s(\d+)m", "\1" ) )