Estrai numeri di lunghezza variabile da una stringa in colonne diverseHo una colonna denominata Durata con valori che rappresentano il numero di giorni, ore, minuti e secondi. L'ultima m indica i secondi.
Quindi il formato tipico sarebbe: (0-365)d(0-24)h(0-60)m(0-60)m
Ecco alcuni esempi.:
0g 15h 47m 43m
10 giorni 10 ore 21 minuti 54 minuti
0g 04h 07m 32m
268g 06h 02m 33m
Devo estrarre il numero di giorni, ore, minuti e secondi in diverse colonne in modo da poter eseguire calcoli su di esso.
Ho provato la formula per estrarre il numero di giorni,
Words( :Duration, "d" )[1]
Per estrarre il secondo numero, ho usato la formula:
Substr( Item( 2, :Duration ), 1, 2 );
Allo stesso modo estrai il terzo e il quarto numero utilizzando 3 e 4 nella formula dell'Articolo.
Per convertire queste stringhe in numeriche, ho creato altre 4 colonne; ho copiato, incollato e modificato il tipo di dati in numerico.
Capisco che questo sia un modo circolare per arrivare al risultato.
Mi chiedevo se qualcuno potesse aiutarmi con un modo più efficiente.
Modellazione statistica avanzataRicerche sui consumatori e sul mercatoAccesso ai datiProgettazione di esperimentiPersonalizzazione di massaIngegneria della qualità e dei processiCondivisione e comunicazione dei risultatiRi: Estrarre numeri di varia lunghezza da una stringa in colonne diverseGrazie mille per avermi indicato il registro. Ho visto il risultato lì. Prima pensavo che il risultato verrà visualizzato in una finestra separata.
Ri: Estrarre numeri di varia lunghezza da una stringa in colonne diverseSegno
Avevo l'impressione che il risultato verrà visualizzato in una finestra separata. Ora, ho esaminato il registro e ho visto il risultato lì, quante volte ho eseguito lo script.
Ri: Estrarre numeri di varia lunghezza da una stringa in colonne diverse@txnelson è corretta. Ti ha mostrato come usarlo come uno script separato. Questa espressione è tutto ciò che ti serve per una formula di colonna:
Num( Regex( cell[i], "(\d+)d (\d+)h (\d+)m (\d+)m", "\1" ) )
Ri: Estrarre numeri di varia lunghezza da una stringa in colonne diverse@Mark_Bailey lo script è un JSL autonomo.Lo esegui inserendolo in una finestra di script ed eseguendo lo script.L'ho fatto e ha funzionato benissimo, fornendo i seguenti risultati nel registro JMP
day = 0;
day = 10;
day = 0;
day = 268;
Ri: Estrarre numeri di varia lunghezza da una stringa in colonne diverseSegno,
Ho provato a utilizzare il tuo script in molti modi diversi
a) utilizzando lo script nell'editor di script ed eseguendolo,
b) creare una colonna con il nome "cella" e inserire l'elenco degli elementi al suo interno + creare un'altra colonna "giorno" e utilizzare il "ciclo for" come formula in quella colonna,
e altri modi.
Ottengo un errore.
Ho provato anche a cercare aiuto nell'indice degli script.
Ma non riesco a far funzionare la sceneggiatura.Sono nuovo nello scripting. Potete per favore aiutarmi?
Ri: Estrarre numeri di varia lunghezza da una stringa in colonne diverseFinora hai ottenuto alcune buone soluzioni, ma vorrei sottolineare che eri molto vicino all'uso di Parole() funzione.
Puoi specificare più di un delimitatore nell'ultimo argomento della funzione Words() in modo da poter fare questo:
vals={"0d 15h 47m 43m", "10d 10h 21m 54m","0d 04h 07m 32m", "268d 06h 02m 33m"};
for (i=1, i<=nitems(vals), i++,
show(words(vals[i], "dhm ")) //use "d" "h" "m" and a space as delimiters
);
Nel registro:
/*:
Words(vals[i], "dhm ") = {"0", "15", "47", "43"};
Words(vals[i], "dhm ") = {"10", "10", "21", "54"};
Words(vals[i], "dhm ") = {"0", "04", "07", "32"};
Words(vals[i], "dhm ") = {"268", "06", "02", "33"};
Eccolo nell'editor delle formule, insieme al file Funzioni In giorni(), In ore(), In minuti() per convertire i valori numerici nel numero di secondi in ciascuna di queste unità, per creare una colonna Durata.

Ho allegato anche qui la tabella dei dati.
Questo argomento combina due delle mie funzionalità preferite, la funzione Word() (o Words()) e date e orari. Ecco i post che ho scritto spiegando ciascuno di essi:
Se impari solo una funzione dell'editor di formule, Word() è quella giusta
Utilizzo di date, ore, date e durate in JMP
Ri: Estrarre numeri di varia lunghezza da una stringa in colonne diversePaul- Ho imparato una nuova funzione. Grazie mille per la versione dettagliata e semplificata della soluzione.!
Ri: Estrarre numeri di varia lunghezza da una stringa in colonne diversePerfetto. Grazie mille per la descrizione e gli screenshot. Mi ha fatto risparmiare tempo in altri casi utilizzando recode.
Ri: Estrarre numeri di varia lunghezza da una stringa in colonne diverseUtilizzare Ricodifica -Colonna formula-sotto l'hotspot Nuovi valori selezionare Avanzate - Estrai segmento. Schermate per l'estrazione di file d, sec e jmp con formula salvata per giorno, ora e secondo allegata.


Ri: Estrarre numeri di varia lunghezza da una stringa in colonne diverseQuesto esempio illustra come utilizzare le espressioni regolari.
Names Default To Here( 1 );
cell = {"0d 15h 47m 43m", "10d 10h 21m 54m", "0d 04h 07m 32m", "268d 06h 02m 33m"};
For( i = 1, i <= N Items( cell ), i++,
day = Num( Regex( cell[i], "(\d+)d (\d+)h (\d+)m (\d+)m", "\1" ) );
Show( day );
);Ri: Estrarre numeri di varia lunghezza da una stringa in colonne diverseTabella campione allegata.
Ri: Estrarre numeri di varia lunghezza da una stringa in colonne diverseChe ne dici di usare Regex:
Per il giorno:
Num( Regex( :Duration, "(\d+)d\s(\d+)h\s(\d+)m\s(\d+)m", "\1" ) )
Per l'ora:
Num( Regex( :Duration, "(\d+)d\s(\d+)h\s(\d+)m\s(\d+)m", "\2" ) )
Per il minuto:
Num( Regex( :Duration, "(\d+)d\s(\d+)h\s(\d+)m\s(\d+)m", "\3" ) )
Per il secondo:
Num( Regex( :Duration, "(\d+)d\s(\d+)h\s(\d+)m\s(\d+)m", "\4" ) )
Ogni numero è in un gruppo di acquisizione anche se in realtà non è necessario acquisire gli altri. Potresti semplificarlo con questi:
Num( Regex( :Duration, "(\d+)d\s\d+h\s\d+m\s\d+m", "\1" ) )
Num( Regex( :Duration, "\d+d\s(\d+)h\s\d+m\s\d+m", "\1" ) )
Num( Regex( :Duration, "\d+d\s\d+h\s(\d+)m\s\d+m", "\1" ) )
Num( Regex( :Duration, "\d+d\s\d+h\s\d+m\s(\d+)m", "\1" ) )