Cómo dividir una columna con una cadena no estructuradaHola expertos
Me gusta dividir la columna con una cadena no estructurada en grupos de columnas, pero no lo consigo porque es complicado.
Mi idea es dividir por salto de línea, pero no puedo hacerlo desde texto a columnas por delimitador. La alternativa es reemplazar el salto de línea con cualquier señal disponible en el delimitador. La única opción es ejecutar Regex ( :Column 1, "^\R", "#",GLOBALREPLACE ), pero muestra un resultado inesperado.

Exploración y visualización de datosRe: Cómo dividir una columna con una cadena no estructuradaRe: Cómo dividir una columna con una cadena no estructuradaPuedes obtener esto sustituyendo y luego reemplazando los saltos de línea dobles (o \!N de JMP) con algo (yo usé ¤
Names Default To Here(1);
dt = Open("$DOWNLOADS/example3.jmp");
dt << New Column("Col2", Character, Nominal, Formula(
Substitute(:Column 1, "\!N\!N", "¤")
));

Y luego se necesitan uno (o algunos más) pasos adicionales para los nombres de las columnas.
Re: Cómo dividir una columna con una cadena no estructuradaTuve una idea similar: usar sustituto y buscar nuevas líneas 2x.
Para obtener los nombres de las columnas correctamente, se podría utilizar : como separador, pero:
- : se utiliza también dentro de las entradas
- la muestra tiene un : - pero le falta una nueva línea después.
Así que combiné los dos enfoques:
- buscar salto de línea 2x
- buscar ":"
para encontrar los encabezados.
Para separar el nombre de la columna y la entrada, se pueden apilar las columnas con la configuración Contiguo .
Col2 solo se usa temporalmente, por lo que se puede eliminar al final o agregar como una columna de transformación.
Las columnas que se generan mediante Texto a columnas desde una columna de transformación son las primeras en la tabla.
Esto facilita la selección y el apilamiento de columnas. Solo hay que contar las nuevas columnas y seleccionarlas por índice.
Con la configuración Contigua , se agregan algunas columnas ficticias, que se eliminan en el último paso.

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);No se ve bonito ni suave.
Plan B: configurar una máquina de Turing para calcular las entradas ; )
Re: Cómo dividir una columna con una cadena no estructurada¡Gracias @jthi ! por crear una nueva fórmula que devuelva referencias a las columnas recién creadas :
Desde JMP18, la nueva columna de fórmula devuelve una lista de las columnas recién generadas
Texto a Columnas también podría devolver una lista con referencias a las columnas que se generaron:
Aquí está el deseo: guardar la lista de columnas creadas por texto en la columna
Tenga en cuenta:
La solución alternativa con la matriz asociativa y la operación de eliminación no funciona aquí: baraja las columnas ordenándolas "alfabéticamente" con 10 <2, lo que arruina la operación de pila .
Re: Cómo dividir una columna con una cadena no estructuradaEsta es una idea maravillosa para abordar.
Re: Cómo dividir una columna con una cadena no estructuradaY si te encantan las expresiones regulares pero aún encuentras JSL mayormente incomprensible, puedes recodificar la columna y hacer un reemplazo de cadena (mira el triángulo rojo, "Reemplazar cadena...") y hacer un reemplazo de expresión regular a un carácter extraño ("%" es uno que uso a menudo), luego dividir la columna (Cols -> Texto a columnas) en ese carácter.
Luego puedes parecer un superhéroe de JMP al asociar alt-ctrl-shift-r a "Recodificar" y alt-ctrl-shift-s a "Texto a columnas", y solo se necesitan unas cuantas pulsaciones de teclas para hacer todo eso.
Re: Cómo dividir una columna con una cadena no estructurada@BHarris gracias por tu consejo. Por cierto, ¿cómo hago para reemplazar un salto de línea con un carácter extraño en una expresión regular?

Re: Cómo dividir una columna con una cadena no estructuradaEn el lenguaje de las expresiones regulares, un salto de línea es "\n". Por lo tanto, busque "\n" (sin comillas) y haga clic en "Usar expresiones regulares"; luego, reemplácelo por "%".