clonar una columna<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hola a todos,
Quiero clonar una columna en la tabla de datos (hacer una nueva columna idéntica en todo menos en su nombre). ¿Hay una forma más elegante (y robusta) de hacer esto o necesito extraer los valores y todas las propiedades y asignarlos a la nueva columna como tal?
dt3 = Abierto ( "$SAMPLE_DATA/Coches.jmp" ) ;
// agregar una propiedad de columna
dt3 : Hacer << Establecer propiedad (
"Colores de valor" ,
{ "Acura" = - 13977687 , "Audi" = - 3780931 , "BMW" = - 4222943 , "Buick" = -
13596966 , "Cadillac" = - 2211217 , "Chevrolet" = - 10562780 , "Chrysler" = -
13156647 , "Daihatsu" = - 2078390 , "Esquivar" = - 13182413 , "Águila" = - 9549600 ,
"Vado" = - 2334147 , "Geo" = - 13772446 , "honda" = - 9282864 , "Hyundai" = -
6995852 , "Infinito" = - 1524612 , "Isuzu" = - 9458080 , "Todoterreno" = - 14452073 ,
"Lexus" = - 6391856 , "Lincoln" = - 2745505 , "Mazda" = - 10199751 , "Mercedes" =
- 7150697 , "Mercurio" = - 10513726 , "Mitsubishi" = - 8381519 , "Nissan" = -
3502441 , "Oldsmobile" = - 3615440 , "Peugeot" = - 13925307 , "Plymouth" = -
11502354 , "Pontiac" = - 7449196 , "Renault" = - 9229791 , "Saab" = - 4074344 ,
"Saturno" = - 13050224 , "Subaru" = - 12565885 , "Suzuki" = - 2068529 , "Toyota" =
- 4494272 , "Volkswagen" = - 11824110 , "Volvo" = - 8734293 , "Yugo" = - 13849421 }
) << celda de color por valor ;
// clonar la columna
clon_columna = dt3 : Hacer << Obtener guión ;
clon_columna ;
Re: clonar una columnaNo, esa interpretación es completamente incorrecta.
La creación de scripts de JMP generalmente implica el uso de objetos JMP incorporados, como tablas de datos, columnas de datos o plataformas de análisis. Utiliza estos objetos enviando un mensaje al objeto que indica la acción deseada. La forma general se muestra aquí en ambas versiones: usando la función JMP real y usando el operador equivalente.
Send( object, message );
object << message;
El objeto está representado por un valor de referencia. El mensaje se representa por nombre. Este ejemplo se interpreta de la siguiente manera:
dt3:Make << Get Script
Envía el mensaje Obtener guión al objeto denominado dt3: Hacer . Esta referencia utiliza la forma tabla:columna . Una referencia a una tabla de datos se almacenó previamente en la variable dt3 . La referencia a la columna es por nombre.
El mensaje Obtener guión se puede enviar a cualquier objeto JMP. Cada objeto anula el método 'captador' detrás de este mensaje para devolver el script que volverá a producir el objeto original. Es decir, devuelve el código que clonará el objeto. Por lo tanto, siempre puede usar el mismo mensaje para obtener el código único de cualquier objeto.
Re: clonar una columnaGracias por la explicación y la rápida respuesta. Supongo que Get es el nombre del script que está 'integrado' en jmp y se ejecuta. De lo contrario, ¿cómo sabría clonar la columna en lugar de realizar alguna otra operación? He aprendido mucho con tu respuesta.
Re: clonar una columnaTrabajemos en el orden en que se evaluará la expresión.
dt3:Make << Get script
El mensaje hará que JMP devuelva el código JSL que crearía la misma columna.
Eval(dt3:Make << Get script)
El código JSL se evalúa dando como resultado una nueva columna de datos que es una copia de la columna :Make original. La función Eval() también devolverá una referencia a esa nueva columna.
Eval(dt3:Make << Get script) << set name("Clone");
Finalmente, envíe a la nueva columna el mensaje para cambiar el nombre de la nueva columna usando la referencia del objeto.
Re: clonar una columnaHola MS, ¿Te importaría explicar cómo este comando clona la columna seleccionada en un dt? Eval(dt3:Make << Get script) << set name("Clone"); Me doy cuenta de que este no es normalmente el tipo de pregunta que se hace aquí y fue hace 5 años, pero este es el comando más opaco que he visto en cualquier lenguaje de programación que haya usado. ¡Funciono muy bien sin embargo!Re: clonar una columnaGracias EM ,
Es cierto que los colores no son muy útiles en una mesa privada.
el caso es que estoy escribiendo un algoritmo basado en un proceso heurístico. esto significa que necesito tener un script que haga lo que haría si tuviera que "leer" las líneas de datos una por una e interpretarlas (aquí es donde necesito los colores). por otro lado, el script debe ser rápido cuando se ejecuta, por lo que necesito recuperarme y cuarto entre las tablas que veo y las de ejecución rápida (privadas). esta transición entre tablas visuales y privadas presenta desafíos de solidez al crear scripts en algunas tablas abiertas.
Ron
Re: clonar una columnaRealmente no estoy seguro de qué valor tiene mantener las propiedades de la columna como los colores de valor en una tabla privada.Si los datos son lo único que le interesa (normalmente cierto para tablas privadas), se podría usar el método más simple a continuación:
dt3 << Nueva columna ( "Hacer clon" , Fórmula ( dt3 : Hacer ))
Re: clonar una columnagracias Dave@Pega-Analytics txnelson ,
Esto es lo que estaba buscando. No esperaba que duplicar una columna fuera tan engorroso.
el siguiente es mi guión final:
Nombres predeterminados hasta aquí ( 1 ) ;
dt3 = Abierto ( "$SAMPLE_DATA/Coches.jmp" , privado ) ;
// clonar en la misma tabla
evaluar ( Analizar gramaticalmente ( "(dt3<<" || carbonizarse ( dt3 : Hacer << Obtener guión ) || ") << establecer nombre(\!"Clonar\!");" )) ;
// prueba de que la columna fue clonada - registro de verificación
dt3 : Clon << obtener guión ;
cerca ( dt3 , sin guardar ) ;
mejor,
Ron
Re: clonar una columnaAquí hay un ejemplo completo de una forma de anteponer el puntero de la tabla de datos:
Eval(Parse("(dtxxx<<"||char(dt3:Make << Get script)||") << set name(\!"Clone\!");"));
Re: clonar una columnaPuede hacerlo más sólido editando la variable del script antes de la evaluación, es decir, anteponga "dt << " a la expresión.
Re: clonar una columnael problema de robustez se presentaba al usar tablas privadas, ya que el clon se enviaba a otra tabla que no era privada.
Re: clonar una columnaGracias EM ,
Me sorprende que no haya un comando jsl para duplicar una columna existente. además, si dt3 no es la tabla activa, crea la nueva columna en otra tabla.
Re: clonar una columnaEso me parece muy elegante. ¿Has experimentado algún problema con la robustez?
Si no desea desperdiciar memoria en una variable, se puede simplificar int o una sola línea:
evaluar ( dt3 : Hacer << Obtener guión ) << escoger un nombre ( "Clon" ) ;
Para clonar varias columnas, consideraría hacer un subconjunto de estas, cambiar el nombre de las columnas y actualizar con la tabla de datos original.