Crear nuevas columnas e insertar fórmulas basadas en las celdas de las columnas originalesHola,
Soy un scriptor JMP sin experiencia y estoy tratando de escribir mi primer guión largo (er). Estoy teniendo problemas con una parte. Esto es lo que estoy tratando de hacer: tengo varias tablas de datos en las que usaré este script. Me gustaría que la secuencia de comandos vea todas las columnas, excluyendo la primera columna (los números de columna y fila variarán para cada tabla de datos) y crearán una nueva columna para cada columna que ya esté presente en la tabla. Me gustaría que el nombre de cada una de las nuevas columnas sea el mismo que el de cada una de las columnas originales pero con un "código" al final, y preferiblemente esté ubicado al lado de la columna original en la tabla. Dentro de cada nueva columna, me gustaría que la fórmula fuera una declaración if / then. Si "Columna A" tiene el texto "<" en la celda, entonces 0, de lo contrario 1.
Espero que mi explicación tenga sentido. He publicado mi guión aunque parece que se rompe en la línea 8 y no estoy seguro de por qué.
¡Gracias por cualquier ayuda!
Lacey
Names Default To Here( 1 );
dt = Current Data Table();
col_list = dt << get column names( string );
For( i = 2, i <= nitems( col_list ), i++,
data_col = ":" || col_list[i];
code_col = col_list[i] || "_Code";
str = evalinsert (
"\[dt << New Colum ("^code_col^", Numeric, Continuous,
Format("Best",12),
Formula(If( Contains( "^code_col^", "<" ),
0,
1
)));
);]\");
eval(parse(str));
);Re: Crear nuevas columnas e insertar fórmulas basadas en las celdas de las columnas originalesSí, tengo que trabajar. Muchas gracias!
Re: Crear nuevas columnas e insertar fórmulas basadas en las celdas de las columnas originalesLa función: Nombre () está diseñada para manejar este problema. A continuación se muestra una modificación que realicé en su script que creo que resolverá el problema. No he probado esta modificación, pero creo que funcionará. Si no, debería poder ver lo que estoy tratando de hacer y debería poder hacerlo funcionar.
Names Default To Here( 1 );
dt = Current Data Table();
col_list = dt << get column names( string );
For( i = 13, i <= N Items( col_list ), i++,
Eval(
Substitute(
Expr(
Column(col_list[i]) << Data Type( Character );
dt << Add Multiple Columns( __NewColName__, 1, after( __OrigCol__ ), Numeric );
Column( __NewColName__ ) << set formula( If( Contains( __OrigCol__, "<" ), 1, 0 ) );
),
Expr( __NewColName__ ), col_list[i] || "_Code" ,
Expr( __OrigCol__ ), Parse( ":Name(\!"" || col_list[i] || "\!:)" )
)
)
);Re: Crear nuevas columnas e insertar fórmulas basadas en las celdas de las columnas originalesHola Jim,
Fui a probar el script en una nueva tabla de datos y tuve un problema con los nombres de mis columnas. Me ocupo de los datos ambientales, y muchas veces los nombres de los analitos (es decir, los nombres de las columnas) tendrán símbolos en el nombre como "-", "[", "]", "(", ")" y / o " , ". Cuando ejecuté el script, se produjo un error en la primera columna que era "3-Metil-1-buteno". ¿Hay una solución para esto?
Gracias,
Lacey
Re: Crear nuevas columnas e insertar fórmulas basadas en las celdas de las columnas originalesEso funcionó muy bien! ¡Gracias!
Fue un error que dejara esa "columna 13" en la tabla de datos. Ese fue solo el que me aseguré de que mi declaración de if if funcionaba y olvidé borrarla cuando la publiqué en línea. Así que simplemente eliminé eso de mi datatable, cambié el 13 a un 2 en el maravilloso script que enviaste y luego funcionó a la perfección.
Muchas gracias!
Lacey
Re: Crear nuevas columnas e insertar fórmulas basadas en las celdas de las columnas originalesAquí hay una modificación de su código que creo que satisface todas sus necesidades. Uno de los elementos con los que tuve que lidiar es que las columnas con las que comienza (2-13) deben ser caracteres, por lo que la fórmula no genera errores. La Columna 13 produce un error en el script, ya que es una columna de fórmula que no se puede cambiar a carácter, porque tan pronto como se ejecuta su fórmula, forzará que la columna sea numérica.
Names Default To Here( 1 );
dt = Current Data Table();
col_list = dt << get column names( string );
For( i = 13, i <= N Items( col_list ), i++,
Eval(
Substitute(
Expr(
Column(col_list[i]) << Data Type( Character );
dt << Add Multiple Columns( __NewColName__, 1, after( __OrigCol__ ), Numeric );
Column( __NewColName__ ) << set formula( If( Contains( __OrigCol__, "<" ), 1, 0 ) );
),
Expr( __NewColName__ ), col_list[i] || "_Code",
Expr( __OrigCol__ ), Parse( ":" || col_list[i] )
)
)
);