Iterando columnasEstoy trabajando en un script para iterar a través de una lista de columnas y me encontré con un problema. Necesito poder generar la referencia de la columna en el formato ":Technology Default", pero todos los métodos que he analizado generan "Column("Technology Default")". Busqué esto en línea y parece que la referencia que necesito es una "referencia de columna" cuando lo que obtengo es una "referencia de objeto de columna".
Automatización y secuencias de comandosRe: Iterar columnas¿Que estás tratando de hacer? Tiene AsColumn() y Column() (y a veces Eval()) que puede usar (para ese formato, As Column() generalmente debería funcionar, pero es posible que necesite usarlo con expresiones).
Editar:
Algunos enlaces:
Si desea obtener ese formato en una fórmula, por ejemplo, EvalExpr + Name Expr + As Column es el método con el que normalmente empiezo
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
colname = "height";
Eval(EvalExpr(
dt << New Column(Eval Insert("^colname^*^colname^"), Numeric, Continuous, Formula(
Expr(Name Expr(AsColumn(dt, colname))) * Expr(Name Expr(AsColumn(dt, colname)))
));
));
Re: Iterar columnasMi objetivo final es tener algo que pueda usar en una fórmula en una nueva columna. La fórmula solo reconoce las columnas cuando se nominan como ":Columna", como parece. De todos modos, con la ayuda de la información que encontré en este enlace.
Resuelto: Cómo reemplazar comillas dobles en una cadena - Comunidad de usuarios de JMP
Se me ocurrió un método de fuerza bruta para lograr el objetivo. No es elegante pero parece funcionar. Todavía abierto a sugerencias sobre cómo hacer esto de manera más oficial.
Adiós
llave inglesa
dt = Current Data Table();
lst = dt << Get Column Names(string);
For(i=1,i<=NItems(lst),i++,
colName = lst[i];
col = Column(colName);
Colstring = (":"||colName);
Colref = Parse( Eval Insert(Colstring));
Show(Colref););Re: Iterar columnasGeneralmente no me meto con referencias de columnas como esa en JMP porque es demasiado molesto administrarlas -> Utilizo cadenas de nombres de columnas y las uso según sea necesario con Column(), As Column(), Eval() o NameExpr. (AsColumn()) (si por alguna razón necesito usar referencias de columnas (Column("something")) , las convertiré en cadenas usando << Get Name cuando necesite usarlas).
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
col1 = "height";
col2 = "weight";
<BR />// Good way but can be (sometimes) difficult to read
Eval(EvalExpr(
dt << New Column("mycol1", Numeric, Continuous, Formula(
Expr(Name Expr(AsColumn(dt, col1))) * Expr(Name Expr(AsColumn(dt, col2)))
))
));
<BR />// might be easier to read
Eval(Substitute(
Expr(dt << New Column("mycol2", Numeric, Continuous, Formula(
_firstcol_ * _secondcol_
))),
Expr(_firstcol_), Name Expr(AsColumn(dt, col1)),
Expr(_secondcol_), Name Expr(AsColumn(dt, col2))
));
// "reusable"
ref1 = Name Expr(AsColumn(dt, col1)); // this will return :height BUT you will generally still need Name Expr() to use it
ref2 = Name Expr(AsColumn(dt, col2));
// wont work, because ref1 will get evaluated for "current" row
Eval(EvalExpr(
dt << New Column("mycol3", Numeric, Continuous, Formula(
Expr(ref1) * Expr(ref2)
))
));
// will work
Eval(EvalExpr(
dt << New Column("mycol3", Numeric, Continuous, Formula(
Expr(Name Expr(ref1)) * Expr(Name Expr(ref2))
))
));
Si intentaras usar solo
dt << New Column("mycol4", Numeric, Continuous, Formula(
ref1 * ref2
));
terminarás con una fórmula como ref1*ref2 ya que no se evalúan según la fórmula

Algunos enlaces más:
Re: Iteración de columnasPuede que me esté equivocando de tema, pero parece que el problema que tienes es que estás usando referencias de columnas en tus fórmulas y lo que tienes que hacer es resolver esas referencias a medida que se crean las fórmulas. El ejemplo de Jarmo ofrece un ejemplo de cómo hacer exactamente eso, pero puede resultar un poco confuso. A continuación, se intenta explicar el problema y la solución con un ejemplo muy simple.
// Here is a sample script, that creates a new data table
// with 2 columns, and what we want to do, is to simply
// put the value 1 into column c1, and a 2 into column c2
// In the first example, it is done by simply running a
// for() loop and taking the index variable, "i" and using it in
// the formula and squaring it's value.
Names Default To Here( 1 );
dt = New Table( "Example" );
dt<< add rows(1);
For( i = 1, i <= 2, i++,
dt << New Column( "c" || Char( i ),
formula( i^2 )
)
);
// When each column was created, it used the value of i at that
// time within the formula. Thus, for c1, the value of i was 1,
// and for c2 it was 4.
// So now, if we rerun the formulas, it will take the value of
// i at the time of rerunning each formula.
wait(5);
dt<<RERUN formulas=""></RERUN>
<P>Espero que esto sea útil</P>Re: Iteración de columnasEn lugar de la "fuerza bruta"
Colstring = (":"||colName);
Colref = Parse( Eval Insert(Colstring));Una forma más elegante es:
Colref= Name Expr (As Column(colName))
-> ver la respuesta de @jthi .
Ya ayudó a muchos otros usuarios: Manejo de expresiones en JMP: trucos y trampas
por cierto:
en su ejemplo, puede obtener Referencia col( s) directamente a través de Obtener nombres de columnas : simplemente elimine el argumento STRING .
No tienen el ":" delante, pero esto es solo cosmético. 
dt = Current Data Table();
lst = dt << Get Column Names();
For( i = 1, i <= N Items( lst ), i++,
Show( lst[i] );
Show( lst[i][5] );
);
Re: Iteración de columnasSi prefieres los nombres de columnas con : al principio, puedes usar un truco :
Pregúntale a cada uno su nombre.
columnNames = current data table() << Get Column Names;
for (i=1, i<= Nitems(columnNames),i++,columnNames[i]<< get name() );
show(columnNames) // -> column names with leading ":"