Buon pomeriggio.Sto tentando di dividere una colonna in tre nuove colonne e posizionare un pezzo della stringa dalla colonna originale in una delle tre nuove colonne in base al contesto del testo.Capisco che il testo in colonne analizzerebbe la stringa in base a un delimitatore, tuttavia, questo non mi porta esattamente dove devo essere.Ho bisogno di una funzione che legga il testo, controlli determinate parole chiave (anni, mesi o giorni) e quindi inserisca una parte della stringa (il valore numerico che precede "anni", "mesi" o "giorni") nella colonna appropriata . Vedo che la funzione word () può estrapolare la prima parola o valore e questo sarebbe un inizio, ma poi il valore deve ancora essere inserito in una delle tre potenziali colonne in base al testo. Qualcuno ha pensieri su come codificare questo?O idee per una potenziale soluzione?Qualsiasi consiglio é ben accetto.
Esempio allegato in cui la colonna 1 mostra i dati nel formato corrente e le colonne 2-4 sono lo stato ideale.Grazie!
Stefania
Ecco un modo per gestirlo
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",
:AgeMonths[i] =
Num( Word( 1, :age[i], "- " ) )
)
);È fantastico, grazie @txnelson !Questo codice ridurrà notevolmente il tempo necessario per pulire i miei dati, apprezzo molto la tua risposta. Domanda veloce: c'è un modo per incorporare le nuove variabili direttamente nel dt esistente piuttosto che crearne uno nuovo e poi unirli di nuovo al dt originale?
Stefania
Buona pesca @Thierry_S .Grazie !