Colonna divisa in base al testoBuon pomeriggio.Sto tentando di dividere una colonna in tre nuove colonne e di inserire un pezzo di 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 qualche 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 un pezzo 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 il valore deve ancora essere inserito in una delle tre potenziali colonne in base al testo. Qualcuno ha idee su come codificarlo?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
Ingegneria della qualità e dei processiRi: Dividi colonna in base al testoNon so cosa stai chiedendoIl mio esempio ha una tabella dati, su cui viene quindi eseguito per fornire 3 nuove colonne, nella tabella dati originale.Non è quello che stai chiedendo?Se desideri solo che le nuove colonne vengano create direttamente in una tabella dati già esistente, JSL lo sarebbe
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], "- " ) )
)
);
Sembra che tu abbia bisogno di leggere un po'.Se non si conosce JMP è necessario leggere i documenti Scoperta di JMP e Utilizzo di JMP.È davvero necessario sapere cosa è disponibile in JMP per diventare uno scripter JSL.Inoltre, dopo aver letto questi 2 documenti, devi leggere la Guida allo scripting.
Ri: Dividi colonna in base al testoBuona pesca @Thierry_S .Grazie !
Ri: Dividi colonna in base al testoÈ davvero fantastico, grazie @txnelson !Questo codice ridurrà notevolmente il tempo necessario per pulire i miei dati, apprezzo molto la tua risposta. Domanda veloce: esiste un modo per incorporare le nuove variabili direttamente nel dt esistente anziché crearne uno nuovo e quindi unirlo nuovamente al dt originale?
Stefania
Ri: Dividi colonna in base al testoCIAO,
Penso che ci sia un piccolo errore di battitura alla fine dello script: nell'ultimo caso Match, la colonna ricevente dovrebbe essere :AgeYears[i], non :AgeMonths[i].
Migliore,
TSRi: Dividi colonna in base al testoEcco un modo per gestire questa situazione
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], "- " ) )
)
);
Sopra è stato corretto come indicato.