Iterazione delle colonneSto lavorando su uno script per scorrere un elenco di colonne e ho riscontrato un problema. Devo essere in grado di restituire il riferimento alla colonna nel formato ":Technology Default" ma ogni metodo che ho esaminato restituisce "Column("Technology Default")". Ho cercato online e sembra che il riferimento di cui ho bisogno è un "riferimento a una colonna" quando ciò che ottengo è un "riferimento a un oggetto colonna". Esiste un modo semplice per fare ciò che cerco?
Automazione e scriptingRe: Iterazione delle colonneCosa stai cercando di fare? Hai AsColumn() e Column() (e talvolta Eval()) che puoi utilizzare (per quel formato As Column() dovrebbe generalmente funzionare, ma potrebbe essere necessario utilizzarlo con le espressioni).
Modificare:
Pochi link:
Se desideri ottenere quel formato nella formula, ad esempio, EvalExpr + Name Expr + As Column è il metodo con cui di solito inizio
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: Iterazione delle colonneIl mio obiettivo finale è avere qualcosa che posso usare in una formula in una nuova colonna. La formula riconosce le colonne solo quando nominate come ":Column" come sembra. Ad ogni modo, con l'aiuto delle informazioni che ho trovato a questo link.
Risolto: come sostituire le virgolette doppie nella stringa - Comunità degli utenti JMP
Ho escogitato un metodo di forza bruta per raggiungere l'obiettivo. Non è elegante ma sembra funzionare. Sono ancora aperto a suggerimenti su come farlo in modo più ufficiale.
Ciao
Testa di chiave
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: Iterazione delle colonneIn genere non mi intrometto con riferimenti a colonne del genere in JMP perché è troppo fastidioso gestirli -> utilizzo le stringhe dei nomi delle colonne e le utilizzo secondo necessità con Column(), As Column(), Eval() o NameExpr (AsColumn()) (se per qualche motivo ho bisogno di usare riferimenti a colonne (Column("qualcosa")) , li convertirò in stringhe usando << Ottieni nome quando ho bisogno di usarli).
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))
))
));
Se hai provato a usare just
dt << New Column("mycol4", Numeric, Continuous, Formula(
ref1 * ref2
));
ti ritroverai con una formula come ref1*ref2 poiché queste non vengono valutate nella formula

Ancora qualche link:
Re: Iterazione delle colonneForse sto sbagliando argomento, ma sembra che il problema che stai riscontrando sia che stai utilizzando riferimenti di colonna nelle tue formule, e ciò che devi fare è risolvere tali riferimenti man mano che le formule vengono create. L'esempio di Jarmo fornisce un esempio di come fare proprio questo, ma potrebbe essere un po' confusionario. Di seguito è riportato un tentativo di spiegare il problema e la soluzione in un esempio molto semplice
// 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>Spero che questo sia utile</P>Re: Iterazione delle colonneinvece della "forza bruta"
Colstring = (":"||colName);
Colref = Parse( Eval Insert(Colstring));un modo più elegante è:
Colref= Name Expr (As Column(colName))
-> vedi la risposta di @jthi .
Ha già aiutato molti altri utenti: Gestione delle espressioni in JMP: suggerimenti e trappole
A proposito:
Nel tuo esempio, puoi ottenere i Colref direttamente tramite Ottieni nomi di colonna , rimuovendo semplicemente l'argomento STRING .
Non hanno il ":" davanti, ma è solo cosmetico 
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: Iterazione delle colonneSe preferisci i nomi delle colonne con ":" iniziale, puoi usare un trucco :
chiedi a ciascuno di loro il nome.
columnNames = current data table() << Get Column Names;
for (i=1, i<= Nitems(columnNames),i++,columnNames[i]<< get name() );
show(columnNames) // -> column names with leading ":"