Diviser la colonne en fonction du texteBon après-midi.J'essaie de diviser une colonne en trois nouvelles colonnes et de placer un morceau de chaîne de la colonne d'origine dans l'une des trois nouvelles colonnes. en fonction du contexte du texte.Je comprends que le texte dans les colonnes analyserait la chaîne en fonction d'un délimiteur, cependant, cela ne m'amène pas vraiment là où je dois être.J'ai besoin d'une fonction qui lit le texte, vérifie certains mots-clés (années, mois ou jours), puis place un morceau de chaîne (la valeur numérique qui précède « années », « mois » ou « jours ») dans la colonne appropriée. . Je vois que la fonction word() peut extrapoler le premier mot ou la première valeur et ce serait un début, mais la valeur doit encore être placée dans l'une des trois colonnes potentielles basées sur le texte. Quelqu'un a-t-il une idée sur la façon de coder cela ?Ou des idées pour une solution de contournement potentielle ?Tout conseil est grandement apprécié.
Exemple ci-joint où la colonne 1 montre les données dans leur format actuel et les colonnes 2 à 4 sont l'état idéal.Merci!
Stéphanie
Ingénierie Qualité et ProcédésRe : Diviser une colonne en fonction du texteJe ne sais pas ce que vous demandez.Mon exemple comporte une table de données, sur laquelle on agit ensuite pour vous donner 3 nouvelles colonnes, dans la table de données d'origine.N'est-ce pas ce que vous demandez ?Si vous souhaitez simplement créer les nouvelles colonnes directement dans une table de données déjà existante, le JSL serait
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], "- " ) )
)
);
Il semble que vous ayez besoin de lire un peu.Si vous débutez avec JMP, vous devez lire les documents Découverte de JMP et Utilisation de JMP.Il faut vraiment savoir ce qui est disponible dans JMP pour devenir un scripteur JSL.Et aussi, après avoir lu ces 2 documents, vous devez lire le Guide de Scripting.
Re : Diviser une colonne en fonction du texteBonne prise @Thierry_S .Merci !
Re : Diviser une colonne en fonction du texteC'est tellement génial, merci @txnelson !Ce code va réduire considérablement le temps qu'il me faut pour nettoyer mes données, j'apprécie grandement votre réponse. Question rapide : existe-t-il un moyen d'intégrer les nouvelles variables directement dans le dt existant plutôt que d'en créer une nouvelle, puis de les fusionner avec le dt d'origine ?
Stéphanie
Re : Diviser une colonne en fonction du texteSalut,
Je pense qu'il y a une faute de frappe mineure à la fin du script : dans le dernier cas Match, la colonne de réception devrait être :AgeYears[i], et non :AgeMonths[i].
Meilleur,
TSRe : Diviser une colonne en fonction du texteVoici une façon de gérer cela
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], "- " ) )
)
);
Ci-dessus a été corrigé comme indiqué.