Dividir columna según el textoBuenas tardes.Estoy intentando dividir una columna en tres columnas nuevas y colocar una parte de la cadena de la columna original en una de las tres columnas nuevas. basándose en el contexto del texto.Entiendo que el texto en columnas analizaría la cadena en función de algún delimitador; sin embargo, esto no me lleva a donde necesito estar.Necesito una función que lea el texto, verifique ciertas palabras clave (años, meses o días) y luego coloque una parte de la cadena (el valor numérico que precede a "años", "meses" o "días") en la columna apropiada. . Veo que la función word() puede extrapolar la primera palabra o valor y esto sería un comienzo, pero el valor aún debe colocarse en una de las tres columnas potenciales según el texto. ¿Alguien tiene alguna idea sobre cómo codificar esto?¿O ideas para una posible solución alternativa?Cualquier idea es muy apreciada.
Ejemplo adjunto donde la columna 1 muestra los datos en su formato actual y las columnas 2 a 4 son el estado ideal.¡Gracias!
Estefanía
Ingeniería de Calidad y ProcesosRe: Dividir columna según el textoNo sé lo que estás preguntando.Mi ejemplo tiene una tabla de datos, sobre la que luego se actúa para obtener 3 columnas nuevas, en la tabla de datos original.¿No es eso lo que estás pidiendo?Si solo desea que las nuevas columnas se creen directamente en una tabla de datos ya existente, el JSL sería
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], "- " ) )
)
);
Parece que necesitas leer un poco.Si es nuevo en JMP, debe leer los documentos Descubriendo JMP y Uso de JMP.Uno realmente necesita saber qué está disponible en JMP para convertirse en un scripter JSL.Y también, después de leer esos 2 documentos, debes leer la Guía de secuencias de comandos.
Re: Dividir columna según el textoBuena atrapada @Thierry_S .Gracias !
Re: Dividir columna según el textoEsto es tan asombroso, gracias. @txnelson !Este código va a reducir en gran medida el tiempo que me lleva limpiar mis datos, agradezco mucho su respuesta. Pregunta rápida: ¿Hay alguna manera de incrustar las nuevas variables directamente en el dt existente en lugar de crear uno nuevo y luego volver a fusionarlo con el dt original?
Estefanía
Re: Dividir columna según el textoHola,
Creo que hay un error tipográfico menor al final del script: en el último caso de Coincidencia, la columna de recepción debería ser :AgeYears[i], no :AgeMonths[i].
Mejor,
TSRe: Dividir columna según el textoAquí hay una manera de manejar esto.
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], "- " ) )
)
);
Lo anterior fue corregido como se indicó.