Comment diviser une colonne avec une chaîne non structuréeBonjour les experts
J'aime bien diviser la colonne avec une chaîne non structurée en plusieurs groupes de colonnes. Mais je n'y parviens pas car c'est compliqué.
je pense qu'il faut diviser par saut de ligne, mais je n'arrive pas à passer du texte aux colonnes par délimiteur. L'alternative est de remplacer le saut de ligne par tous les signaux disponibles dans le délimiteur. La seule option est d'exécuter Regex ( :Column 1, "^\R", "#",GLOBALREPLACE ), mais cela montre un résultat inattendu.

Exploration et visualisation des donnéesRe: Comment diviser une colonne avec une chaîne non structuréeRe: Comment diviser une colonne avec une chaîne non structuréeVous pouvez obtenir cela en substituant puis en remplaçant les doubles sauts de ligne (ou \!N de JMP) par quelque chose (j'ai utilisé ¤
Names Default To Here(1);
dt = Open("$DOWNLOADS/example3.jmp");
dt << New Column("Col2", Character, Nominal, Formula(
Substitute(:Column 1, "\!N\!N", "¤")
));

Et puis une (ou quelques autres) étapes supplémentaires sont nécessaires pour les noms de colonnes
Re: Comment diviser une colonne avec une chaîne non structuréeJ'ai eu une idée similaire : utiliser substitute et rechercher 2x nouvelles lignes.
Pour obtenir les noms de colonnes corrects, on pourrait utiliser le ":" comme séparateur, mais :
- ":" est également utilisé dans les entrées
- l'échantillon comporte un ":" - mais manque une nouvelle ligne par la suite.
J'ai donc combiné les deux approches :
- recherche 2x saut de ligne
- recherche ":"
pour trouver les en-têtes.
Pour séparer le nom de la colonne et l'entrée, on peut empiler les colonnes avec le paramètre Contiguous .
Col2 est simplement utilisé temporairement, il peut donc être supprimé à la fin ou ajouté en tant que colonne de transformation.
Les colonnes générées via Texte en colonnes à partir d'une colonne de transformation sont les premières du tableau.
Cela facilite leur sélection et leur empilement. Il suffit de compter les nouvelles colonnes et de les sélectionner par index.
Avec le paramètre Contigu , certaines colonnes factices sont ajoutées, celles-ci sont supprimées à la dernière étape.

dt = Open( "$DOWNLOADS/example3.jmp" );
tmpCol = dt << Transform Column ( "split",
Character,
Formula(
Substitute(
Regex(
Substitute( :Column 1, "\!r\!n", "#", "Sample:", "Sample^\!n" ),
"#{2,}(.*?):",
"^\1^",
GLOBALREPLACE
),
"#", "\!r"
)
)
);
before = NItems(dt << get column names());
dt << Text to Columns(
columns (tmpCol),
Delimiters( "^" )
);
newCols = NItems(dt << get column names()) - before;
result = dt << Stack(
columns(
Eval(1::newCols)
),
Number of Series( Eval(newCols/2) ),
Contiguous,
Drop All Other Columns( 1 )
);
// Move column names up
result << Move up;
cols= result << get column names();
cols = Filter each({col}, cols, Contains(col << get name, "split"))
result << Delete Columns(cols);Ça n'a pas l'air joli et lisse...
Plan B : mettre en place une machine de Turing pour calculer les entrées ; )
Re: Comment diviser une colonne avec une chaîne non structuréemerci @jthi ! pour Make New Formula Column qui renvoie des références aux colonnes nouvellement créées :
Depuis JMP18, la nouvelle colonne de formule renvoie une liste de la colonne nouvellement générée
Le texte dans les colonnes pourrait également renvoyer une liste avec des références aux colonnes qui ont été générées :
voici le souhait : sauvegarder la liste des colonnes créées par le texte dans une colonne
Veuillez noter:
la solution de contournement avec le tableau associatif et l'opération de suppression ne fonctionne pas ici - elle mélange les colonnes en les triant ensuite « par ordre alphabétique » avec 10 <2 - ce qui ruine l'opération de pile .
Re: Comment diviser une colonne avec une chaîne non structuréec'est une merveilleuse idée à aborder.
Re: Comment diviser une colonne avec une chaîne non structuréeEt si vous aimez les expressions régulières mais que vous trouvez toujours le JSL pour la plupart incompréhensible, vous pouvez recoder la colonne et effectuer un remplacement de chaîne (voir le triangle rouge, « Remplacer la chaîne... ») et effectuer un remplacement d'expression régulière sur un caractère étrange (« % » est celui que j'utilise souvent), puis diviser la colonne (Cols -> Texte en colonnes) sur ce caractère.
Vous pouvez alors ressembler à un super-héros JMP en liant alt-ctrl-shift-r à « Recoder » et alt-ctrl-shift-s à « Texte en colonnes », et il ne vous faudra que quelques frappes de touches pour faire tout cela.
Re: Comment diviser une colonne avec une chaîne non structurée@BHarris merci pour ton conseil. Au fait, comment puis-je faire une expression régulière pour remplacer un saut de ligne par un caractère étrange là-bas ?

Re: Comment diviser une colonne avec une chaîne non structuréeUn saut de ligne est "\n" dans le langage des expressions régulières. Recherchez donc "\n" (sans guillemets), cliquez sur "Utiliser les expressions régulières", puis remplacez par "%".