Extraer una cadena de un encabezado de columna y agregarla a otraHola,
Tengo un script de importación que utilizo para importar resultados a JMP desde Excel. Mucha gente utiliza la plantilla de Excel y está bloqueada para su edición. Tenemos dos columnas de resultados en Excel que se denominan "Resultados - XXX", donde XXX se reemplaza mediante un marco de Excel para lo que se está estudiando, por lo que cambia en cada archivo. También tenemos columnas llamadas Resultado 1 de JMP y Resultado 2 de JMP que son iguales a las columnas de resultados y están en formato numérico. Las que utilizamos como importación de JMP no pueden importar un número científico desde Excel. Cuando abro Excel en JMP, obtengo algo como la imagen siguiente:

Estoy intentando escribir un script que extraiga la palabra que sigue a "Resultados -" del encabezado de la columna y reemplace el encabezado de la columna de resultados de JMP, pero asegurándome de que reemplace el encabezado correcto, por lo que el resultado sería:

No estoy seguro de si esto es posible en JMP, pero agradecería mucho cualquier ayuda. Ni siquiera estoy seguro de cómo empezar a extraer el final de la cadena del encabezado de la columna, y mucho menos de los pasos posteriores. Gracias de antemano.
Automatización y scriptingRe: Extraer una cadena de un encabezado de columna y agregarla a otraAquí hay una opción JSL pura. Puede (y lo hará) fallar con bastante facilidad según tus datos, ya que tuve que hacer algunas suposiciones.
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(1),
Compress File When Saved(1),
New Column("Results - DNA", Numeric, "Continuous", Format("Best", 12), Set Values([.]), ),
New Column("Results - Protein", Numeric, "Continuous", Format("Best", 12), Set Values([.])),
New Column("JMP Result 1", Numeric, "Continuous", Format("Best", 12), Set Values([.])),
New Column("JMP Result 2", Numeric, "Continuous", Format("Best", 12), Set Values([.]))
);
// Assume that you extract last word from result columns
// and results are first then jmp columns and there is equal amount
result_columns = {};
jmp_columns = {};
colnames = dt << Get Column Names("String");
For Each({colname}, colnames,
If(Starts With(colname, "Results - "),
Insert into(result_columns, Word(-1, colname, " "));
,
Insert Into(jmp_columns, colname)
)
);
For Each({{rescol, jmpcol}}, Across(result_columns, jmp_columns),
Column(dt, jmpcol) << Set Name(rescol);
);
Write();Re: Extraer una cadena de un encabezado de columna y agregarla a otraHola,
Adjunto una tabla de datos de prueba. Pruebe este script:
dt = current data table();
for each({name,i}, dt << get column names(string),
if (contains(name, "Results -"),
new_name_string = word(2, name, "- ");
column(dt,i) << set name(substitute(name, "Results -", "Results_Excel -" ));
for each({name2,p}, dt << get column names(string),
if (contains(name2, "JMP Result"),
column(dt,p) << set name(new_name_string);
Break();
,
);
);
,
);
);
Esto debería lograr lo que buscas. Avísanos si no es así.
Editar: Acabo de ver la excelente solución de Jarmos. Puedes elegir esta opción si no quieres cambiar los nombres de las columnas de "Excel".
Salud,
Jonás
Re: Extraer una cadena de un encabezado de columna y agregarla a otraTambién me vino a la mente la opción de no usar scripts.
Crear tabla apilada

Crear columna de última palabra a partir de la etiqueta

Ahora tienes una tabla de mapeo

Regrese a su tabla original y vuelva a codificar los nombres de las columnas.

Utilice Aplicar asignación para tabla...


Y haga clic en Recodificar


Es una lástima que JMP no pueda crear un script adecuado para esto automáticamente, ya que solo usará los valores de mapeo directamente en el script, por lo que este podría ser un proceso manual a menos que pueda crear una "tabla de mapeo completa" de alguna manera para completarla en el script.
// Recode column names
Local({dt = Data Table("Untitled 2"), names},
names = Recode(
dt << Get Column Names(String),
{Map Value(
_rcOrig,
{"JMP Result 1", "DNA", "JMP Result 2", "Protein"},
Unmatched(_rcNow)
)}
);
For Each({name, i}, names, Column(dt, i) << Set Name(name));
);