Necesita ayuda con expresiones, referencias de columnas, fórmulas y cambio de nombre de columnasTodo,
Necesito ayuda en el siguiente caso.
Tengo un nombre de una columna en formato de cadena.
Necesito crear una nueva columna con una fórmula basada en la anterior. yo lo hago asi:
oldCol = "OldColumn";
Eval( Eval Expr( dt << New Column( "NewColumn", formula( As Column( Expr( oldCol ) ) ) ) ) );
Luego, más adelante en el script, necesito cambiar el nombre de la columna anterior. lo hago así:
Column(oldCol) << Set Name("NewOldColumn");El problema ahora es que, dado que tengo la fórmula de la Nueva columna en forma de:
As Column("OldColumn")no se actualiza cuando OldColumn cambia de nombre.
Me gustaría tenerlo en forma de
:OldColumn
pero no se como hacer eso.
Entonces, la pregunta es: ¿Cómo necesito modificar la expresión:
Eval( Eval Expr( dt << New Column( "NewColumn", formula( As Column( Expr( oldCol ) ) ) ) ) );
para que produzca fórmula en forma de :columnaantigua , y no en forma de Como columna ("OldColumn") ?
Aquí está el guión completo para jugar:
dt = New Table( "TestColumnsReferences",
Add Rows( 3 ),
New Column( "OldColumn", Character, "Nominal", Set Values( {"a", "b", "c"} ) )
);
oldCol = (dt << Get Column Names(string))[1];
//oldCol = "OldColumn";
Eval( Eval Expr( dt << New Column( "NewColumn", formula( As Column( Expr( oldCol ) ) ) ) ) );
Column(oldCol) << Set Name("NewOldColumn");Gracias.
Investigación del Consumidor y del MercadoRe: Necesito ayuda con expresiones, referencias de columnas, fórmulas y cambio de nombre de columnas¡Gracias por el consejo sobre JSL Quote()! Realmente es mucho más limpio ahora que no tengo que escapar de todas las comillas.
Re: Necesito ayuda con expresiones, referencias de columnas, fórmulas y cambio de nombre de columnasEl problema con "Como columna", como expliqué en la pregunta, es que permanece en la fórmula, y luego, cuando cambio el nombre de la columna a la que me refiero en la columna (y la cambio), la fórmula deja de ser válida
Mis disculpas, con su combinación Expr --> Name Expr --> As Column ¡funciona! Convierte As Column("string") en :string!
Me han dado varias soluciones aquí, y me gustó mucho la que tiene JSL Quote, pero esta es mi nueva favorita. Habrá que volver a hacer el guión de nuevo 
Re: Necesito ayuda con expresiones, referencias de columnas, fórmulas y cambio de nombre de columnasUna opción más es la combinación de Eval(), EvalExpr(), Expr(), Name Expr() y As Column()
Names Default To Here(1);
dt = New Table("TestColumnsReferences", Add Rows(3),
New Column("OldColumn", Character, "Nominal", Set Values({"a", "b", "c"}))
);
oldCol = (dt << Get Column Names(string))[1];
//oldCol = "OldColumn";
Eval(Eval Expr(dt << New Column("NewColumn", formula(Expr(Name Expr(AsColumn(oldCol)))))));
Column(oldCol) << Set Name("NewOldColumn");Re: Necesito ayuda con expresiones, referencias de columnas, fórmulas y cambio de nombre de columnasPersonalmente me gusta usar el Cotización JSL () función para mantener el resaltado de sintaxis y el análisis léxico, luego simplemente pase el valor al :Nombre() directiva, como tal
dt = New Table( "TestColumnsReferences",
Add Rows( 3 ),
New Column( "OldColumn", Character, "Nominal", Set Values( {"a", "b", "c"} ) )
);
oldCol = (dt << Get Column Names(string))[1];
//oldCol = "OldColumn";
Eval( Parse( Eval Insert( JSL Quote(
dt << New Column( "NewColumn", Formula( :Name("^oldCol^") ) )
) ) ) );
Column(oldCol) << Set Name("NewOldColumn");Re: Necesito ayuda con expresiones, referencias de columnas, fórmulas y cambio de nombre de columnasSí, esencialmente el mismo enfoque que mostré a continuación, solo use Sustituto en lugar de Insertar evaluación , ¿bien?
Re: Necesito ayuda con expresiones, referencias de columnas, fórmulas y cambio de nombre de columnasBien, lo descubrí. Para la parte de la fórmula solo usa la siguiente cadena:
Name Expr(Expr(Parse(Eval Insert(":#oldCol#", startChar="#"))))Tuve que usar startChar="#" ya que en la fórmula de script real en realidad usa REgEx donde se usa "^".
Así que el guión completo es este:
dt = New Table( "TestColumnsReferences",
Add Rows( 3 ),
New Column( "OldColumn", Character, "Nominal", Set Values( {"a", "b", "c"} ) )
);
oldCol = (dt << Get Column Names(string))[1];
//oldCol = "OldColumn";
Eval( Eval Expr( dt << New Column( "NewColumn", formula( Name Expr(Expr(Parse(Eval Insert(":#oldCol#", startChar="#")))) ) ) ) );
Column(oldCol) << Set Name("NewOldColumn");De esta manera la fórmula tiene :columnaantigua en vez de Como columna ("OldColumn") y ahora puede cambiar el nombre de las columnas de forma segura sin romper la fórmula.
Re: Necesito ayuda con expresiones, referencias de columnas, fórmulas y cambio de nombre de columnasAquí hay un enfoque que funciona para mí.He ampliado la denominación para manejar nombres de columna JMP complejos.Esto confunde un poco al lector, pero hace que el método sea más poderoso.
dt = New Table( "TestColumnsReferences",
Add Rows( 3 ),
New Column( "OldColumn+one", Character, "Nominal", Set Values( {"a", "b", "c"} ) )
);
oldCol = (dt << Get Column Names( string ))[1];
//oldCol = "OldColumn";
//Eval( Eval Expr( dt << New Column( "NewColumn", formula( As Column( Expr( oldCol ) ) ) ) ) );
Eval(
Substitute(
Expr(
dt << New Column( "NewColumn", formula( __oldCol__ ) )
),
Expr( __oldCol__ ), parse(":\!"" || oldCol || "\!"n")
)
);
Column( oldCol ) << Set Name( "NewOldColumn" );
Re: Necesito ayuda con expresiones, referencias de columnas, fórmulas y cambio de nombre de columnasVeo una forma de hacerlo (pero prefiero no hacerlo de esta manera).
Obtenga los nombres de las columnas no como cadenas, sino como referencias, y luego simplemente use Nombre Expr() :
oldCol = (dt << Get Column Names())[1];<BR />Eval( Eval Expr( dt << New Column( "NewColumn", formula( Name Expr( oldCol ) ) ) ) );
pero ya tengo el nombre de la columna como una cadena y me gustaría quedarme con ella.