Spalte basierend auf Text teilenGuten Tag.Ich versuche, eine Spalte in drei neue Spalten aufzuteilen und einen Teil der Zeichenfolge aus der ursprünglichen Spalte in eine der drei neuen Spalten zu platzieren basierend auf dem Kontext des Textes.Ich verstehe, dass Text in Spalten die Zeichenfolge anhand eines Trennzeichens analysieren würde, aber das bringt mich nicht ganz dorthin, wo ich sein muss.Ich benötige eine Funktion, die den Text liest, nach bestimmten Schlüsselwörtern (Jahre, Monate oder Tage) sucht und dann einen Teil der Zeichenfolge (den numerischen Wert, der vor „Jahren“, „Monaten“ oder „Tagen“ steht) in die entsprechende Spalte einfügt . Ich sehe, dass die Funktion „word()“ das erste Wort oder den ersten Wert extrapolieren kann und dies ein Anfang wäre, aber dann muss der Wert immer noch in einer von drei möglichen Spalten basierend auf dem Text platziert werden. Hat jemand eine Idee, wie man das codiert?Oder Ideen für einen möglichen Workaround?Jeder Einblick wird sehr geschätzt.
Beigefügtes Beispiel, bei dem Spalte 1 die Daten in ihrem aktuellen Format zeigt und die Spalten 2–4 den Idealzustand darstellen.Danke schön!
Stephanie
Qualitäts- und VerfahrenstechnikBetreff: Spalte basierend auf Text teilenIch weiß nicht, was Sie fragen.Mein Beispiel hat eine Datentabelle, die dann bearbeitet wird, um Ihnen drei neue Spalten in der ursprünglichen Datentabelle zu geben.Ist das nicht das, was Sie verlangen?Wenn Sie nur möchten, dass die neuen Spalten direkt in einer bereits vorhandenen Datentabelle erstellt werden, wäre dies die JSL
Names Default to Here( 1 );
dt = Current Data Table();
// or dt = Data Table("your data table's name");
dt << New Column( "AgeYears" );
dt << New Column( "AgeMonths" );
dt << New Column( "AgeDays" );
For( i = 1, i <= N Rows( dt ), i++,
Match( Word( 2, :Age[i], "- " ),
"day",
:AgeDays[i] =
Num( Word( 1, :age[i], "- " ) ),
"month",
:AgeMonths[i] =
Num( Word( 1, :age[i], "- " ) ),
"year",
:AgeYears[i] =
Num( Word( 1, :age[i], "- " ) )
)
);
Es scheint, dass Sie etwas lesen müssen.Wenn Sie neu bei JMP sind, müssen Sie die Dokumente „Discovering JMP“ und „Using JMP“ lesen.Um ein JSL-Skripter zu werden, muss man wirklich wissen, was in JMP verfügbar ist.Und nachdem Sie diese beiden Dokumente gelesen haben, müssen Sie außerdem den Scripting Guide lesen.
Betreff: Spalte basierend auf Text teilenGuter Fang @Thierry_S .Danke !
Betreff: Spalte basierend auf Text teilenDas ist so großartig, danke @txnelson !Dieser Code wird die Zeit, die ich zum Bereinigen meiner Daten benötige, erheblich verkürzen. Ich freue mich sehr über Ihre Antwort. Kurze Frage: Gibt es eine Möglichkeit, die neuen Variablen direkt in das vorhandene DT einzubetten, anstatt ein neues zu erstellen und es dann wieder mit dem ursprünglichen DT zusammenzuführen?
Stephanie
Betreff: Spalte basierend auf Text teilenHallo,
Ich glaube, am Ende des Skripts gibt es einen kleinen Tippfehler: Im letzten Match-Fall sollte die Empfangsspalte :AgeYears[i] und nicht :AgeMonths[i] lauten.
Am besten,
TSBetreff: Spalte basierend auf Text teilenHier ist eine Möglichkeit, damit umzugehen
Names Default To Here( 1 );
dt = New Table( "Example dt",
Add Rows( 10 ),
Set Header Height( 46 ),
New Column( "Age",
Character,
"Nominal",
Set Selected,
Set Values(
{"2-day old", "43-day old", "3-day old",
"3-month old", "4-month old", "5-day old",
"32-day old", "13-year old", "10-year old",
"10-month old"}
)
)
);
dt << New Column( "AgeYears" );
dt << New Column( "AgeMonths" );
dt << New Column( "AgeDays" );
For( i = 1, i <= N Rows( dt ), i++,
Match( Word( 2, :Age[i], "- " ),
"day",
:AgeDays[i] =
Num( Word( 1, :age[i], "- " ) ),
"month",
:AgeMonths[i] =
Num( Word( 1, :age[i], "- " ) ),
"year",
:AgeYears[i] =
Num( Word( 1, :age[i], "- " ) )
)
);
Oben wurde wie angegeben korrigiert.