Come dividere una colonna con stringa non strutturataCiao, esperti
Mi piace dividere la colonna con stringhe non strutturate in gruppi di colonne. Ma non ci riesco perché è complicato.
ho pensato di dividere per interruzione di riga, ma non riesco a farlo dal testo alle colonne tramite delimitatore. l'alternativa è sostituire l'interruzione di riga con qualsiasi segnale disponibile nel delimitatore. l'unica possibilità è eseguire Regex ( :Column 1, "^\R", "#",GLOBALREPLACE ), ma mostra un risultato inaspettato.

Esplorazione e visualizzazione dei datiRe: Come dividere una colonna con stringa non strutturataRe: Come dividere una colonna con stringa non strutturataÈ possibile ottenere questo risultato sostituendo e poi sostituendo le doppie interruzioni di riga (o \!N di JMP) con qualcosa (io ho usato ¤
Names Default To Here(1);
dt = Open("$DOWNLOADS/example3.jmp");
dt << New Column("Col2", Character, Nominal, Formula(
Substitute(:Column 1, "\!N\!N", "¤")
));

E poi sono necessari uno (o pochi altri) passaggi aggiuntivi per i nomi delle colonne
Re: Come dividere una colonna con stringa non strutturataHo avuto un'idea simile: usare substitute e cercare 2x nuove righe.
Per ottenere i nomi corretti delle colonne, si potrebbe usare ":" come separatore, ma:
- ":" viene utilizzato anche all'interno delle voci
- il campione ha un ":" - ma manca una nuova riga successiva.
Quindi ho combinato i due approcci:
- cerca 2x interruzione di riga
- ricerca ":"
per trovare le intestazioni.
Per separare il nome della colonna dalla voce, è possibile impilare le colonne con l'impostazione Contiguous .
Col2 viene utilizzata solo temporaneamente, quindi può essere eliminata alla fine oppure aggiunta come colonna di trasformazione.
Le colonne generate tramite Testo in colonne da una colonna di trasformazione sono le prime nella tabella.
Questo rende facile selezionarli e impilarli. Basta contare le nuove colonne e selezionarle per indice.
Con l'impostazione Contigua vengono aggiunte alcune colonne fittizie, che verranno poi rimosse nell'ultimo passaggio.

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);Non ha un aspetto gradevole e liscio...
Piano B: installare una macchina di Turing per calcolare le voci ; )
Re: Come dividere una colonna con stringa non strutturatagrazie @jthi ! per aver creato una nuova colonna formula che restituisce riferimenti alle colonne appena create :
Da JMP18, la nuova colonna formula restituisce un elenco delle colonne appena generate
Il testo in colonne potrebbe restituire anche un elenco con i riferimenti alle colonne generate:
ecco il desiderio: salvare l'elenco delle colonne create dal testo nella colonna
Notare che:
la soluzione alternativa con l'array associativo e l'operazione di rimozione non funziona in questo caso: mescola le colonne ordinandole "alfabeticamente" con 10 < 2, il che rovina l'operazione di stack .
Re: Come dividere una colonna con stringa non strutturataè un'idea meravigliosa da provare.
Re: Come dividere una colonna con stringa non strutturataE se ami le espressioni regolari ma trovi ancora JSL per lo più incomprensibile, puoi ricodificare la colonna, sostituire una stringa (vedi triangolo rosso, "Sostituisci stringa...") e sostituire con un'espressione regolare un carattere insolito ("%" è uno che uso spesso), quindi dividere la colonna (Colonne -> Testo in colonne) su quel carattere.
A questo punto puoi trasformarti in un supereroe JMP associando alt-ctrl-shift-r a "Recode" e alt-ctrl-shift-s a "Text to Columns" e tutto questo con pochi tasti.
Re: Come dividere una colonna con stringa non strutturata@BHarris grazie per il consiglio. A proposito, come faccio a sostituire un'interruzione di riga con un carattere bizzarro come quello lì?

Re: Come dividere una colonna con stringa non strutturataUn'interruzione di riga è "\n" nel linguaggio delle espressioni regolari. Quindi cerca "\n" (senza virgolette) e clicca su "Usa espressioni regolari", quindi sostituisci con "%".