Extrahieren Sie alle gewünschten Elemente aus einer Zeichenfolge, um eine Analyse mehrerer Antworten zu ermöglichenHallo! Ich habe Daten aus SharePoint, die wir (unter anderem) verwenden, um zu verfolgen, welche Tools/Techniken zur Lösung eines Problems verwendet wurden. Dazu gehört übrigens auch JMP.Die Daten (in einer Spalte) folgen dieser Art der durch ; getrennten Formatierung:
;#;;#;;#...
3.4 Offline-Optimierungs- und Simulationstools;#15;#3.9 Simulation;#30;#4.6 Materialbilanz;#22
Jede Zeile in der Tabelle (Problem gelöst) kann eine oder mehrere haben. Manchmal beginnt die mit #, manchmal nicht. Der wird jedoch immer ein # vorangestellt.
Ich möchte die Zeichenfolge nach den und dem Format für die Mehrfachantwortanalyse analysieren: 15, 30, 22 (obiges Beispiel).
- Es gibt ca. 100 , daher erscheint die Erstellung von ca. 100 Sparse-Spalten verschwenderisch.Ist der in der Beispieldatendatei Failures3Delimited.jmp verwendete Ansatz der effizienteste Weg, dieses Problem anzugehen?
- Ich habe angefangen, REGEX zu lernen und konnte ein Vorkommen von finden, aber nicht alle. Brauche ich eine Schleife? Gibt es eine andere Möglichkeit, dies zu tun?
Danke. Verwendung von JMP17.1 Pro.
Automatisierung und SkripterstellungDatenmischung und -bereinigungBetreff: Extrahieren Sie alle gewünschten Elemente aus einer Zeichenfolge, um eine Analyse mehrerer Antworten zu ermöglichenHier ist eine mögliche Lösung, die ich gefunden habe:

Hier ist die Formel, die ich verwendet habe
i = 1;
string = "";
While( Word( i, :Input, "#;" ) != "",
theWord = Word( i, :Input, "#;" );
If( Is Missing( Num( theWord ) ) == 0,
string = string || "," || theWord
);
i++;
);
Try( Substr( string, 2 ) );
Betreff: Extrahieren Sie alle gewünschten Elemente aus einer Zeichenfolge, um eine Analyse mehrerer Antworten zu ermöglichenSehr elegant – anstelle einer komplizierten Aufteilung in erste und zweite Sekunde (zweimal das gleiche Trennzeichen) oder einem Teil, bei dem es sich um den TEXT handelt, einfach:
finde die ZAHLEN 
Hoffen wir, dass es keine ID Nr. 30-2 gibt ...
oder eine Beschreibung: 42
New Column( "IDs",
Character,
"Multiple Response",
Formula(
Concat Items(
Transform Each( {theWord}, Words( :Input, ";#" ),
Char( Num( theWord ) )
),
""
)
),
Set Property( "Multiple Response", Multiple Response( Separator( "." ) ) ),
)
Betreff: Extrahieren Sie alle gewünschten Elemente aus einer Zeichenfolge, um eine Analyse mehrerer Antworten zu ermöglichenIch werde die Verwendung nicht vorschlagen JMPs Zeichenmuster da es ziemlich schwer zu verstehen ist (zumindest alle verschiedenen Funktionen), aber ich habe es (vielleicht) geschafft, dies damit zu tun
Names Default To Here(1);
str = "3.4 Offline Optimization & Simulation Tools;#15;#3.9 Simulation;#30;#4.6 Material Balance;#22";
idlist2 = {};
resval = "";
Pat Match(str, Pat Span("#") + Pat Regex("\d+?") >> next_id + Pat Regex("(;|$)") + Pat Test(
Insert Into(idlist2, next_id); resval = Concat Items(idlist2, ", "))
);
show(idlist2, resval);
Hier ist ein Beispiel für die Verwendung in einer Formel
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(1),
Compress File When Saved(1),
New Column("Column 1",
Character,
"Nominal",
Set Values(
{
"3.4 Offline Optimization & Simulation Tools;#15;#3.9 Simulation;#30;#4.6 Material Balance;#22"
}
)
),
New Column("Column 2",
Character,
"Multiple Response",
Formula(
idlist2 = {};
resval = "";
Pat Match(
:Column 1,
Pat Span("#") + Pat Immediate(Pat Regex("\d+?"), next_id)
+Pat Regex("(;|$)") + Pat Test(
Insert Into(idlist2, next_id);
resval = Concat Items(idlist2, ", ");
)
);
resval;
),
Set Property("Multiple Response", Multiple Response(Separator(",")))
)
)Betreff: Extrahieren Sie alle gewünschten Elemente aus einer Zeichenfolge, um eine Mehrfachantwortanalyse zu ermöglichenDanke, Jim! Ich dachte, dass eine Art Schleife den Zweck erfüllen würde, mit oder ohne REGEX. Hoffe, dass es dir gut geht!
Betreff: Extrahieren Sie alle gewünschten Elemente aus einer Zeichenfolge, um eine Analyse mehrerer Antworten zu ermöglichenJarmo: Danke für deine Mühe! Ich habe die Abschnitte zu REGEX und Pat Match im Skripthandbuch gelesen und beschlossen, Pat Match nicht auszuprobieren, es sei denn, es ist absolut notwendig ...
Betreff: Extrahieren Sie alle gewünschten Elemente aus einer Zeichenfolge, um eine Analyse mehrerer Antworten zu ermöglichenhogi: Vielen Dank für eure beiden Einsendungen! Ich hatte Words() schon früher verwendet, aber nicht darüber nachgedacht, weil ich schon früh davon überzeugt war, dass ich eine REGEX-Lösung anstreben müsste. Diese Lösung ist sehr elegant! Ich muss mich über Concat Items() informieren...
Jim/Jarmo/hogi: Du hast die globale Macht der Community gezeigt! Ich sitze jetzt in Kuala Lumpur. Ich habe dies als erstes an meinem Morgen gepostet, als du wahrscheinlich schlafen wolltest/schon schliefst. Ich habe am späten Nachmittag eine Lösung von Ihnen erhalten. Danke nochmal!
Betreff: Extrahieren Sie alle gewünschten Elemente aus einer Zeichenfolge, um eine Analyse mehrerer Antworten zu ermöglichen@hogi schrieb:
... komplizierte Trennung von erster und zweiter Sekunde ...
eigentlich - weniger kompliziert als ich dachte 
New Column( "IDs",
Character,
"Multiple Response",
Formula(
splitItems = Words( :Input, ";#" );
Concat Items( splitItems[2:: N Items( splitItems ):: 2], "," );
)
)
... und eine der nächsten Versionen von Jmp wird es noch einfacher machen:
https://community.jmp.com/t5/JMP-Wish-List/new-slicing-options-for-matrices/idc-p/614326/highlight/true#M4057
Betreff: Extrahieren Sie alle gewünschten Elemente aus einer Zeichenfolge, um eine Mehrfachantwortanalyse zu ermöglichenDie notwendige Änderung besteht darin, dass das aktuelle Trennzeichen eine ist, die JMP als Mehrfachantwort erkennt. Auch die Substitute-Funktion würde in diesem Fall gut funktionieren.
Betreff: Extrahieren Sie alle gewünschten Elemente aus einer Zeichenfolge, um eine Analyse mehrerer Antworten zu ermöglichen?