Itération des colonnesJe travaille sur un script pour parcourir une liste de colonnes et j'ai rencontré un problème. Je dois pouvoir afficher la référence de la colonne sous la forme ":Technology Default" mais chaque méthode que j'ai examinée génère "Column("Technology Default")" . J'ai recherché cela en ligne et il semble que la référence dont j'ai besoin est une "référence de colonne" alors que ce que j'obtiens est une "référence d'objet de colonne". Existe-t-il un moyen simple de faire ce que je recherche ?
Automatisation et scriptsRe : Itération des colonnesQu'essayez-vous de faire? Vous avez AsColumn() et Column() (et parfois Eval()) que vous pouvez utiliser (pour ce format, As Column() devrait généralement fonctionner, mais vous devrez peut-être l'utiliser avec des expressions).
Modifier:
Quelques liens :
Si vous souhaitez obtenir ce format dans une formule par exemple, EvalExpr + Name Expr + As Column est la méthode avec laquelle je commence habituellement
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 : Itération des colonnesMon objectif final est d'avoir quelque chose que je puisse utiliser dans une formule dans une nouvelle colonne. Les formules ne reconnaissent les colonnes que lorsqu'elles sont nommées comme ":Column" comme il semble. Quoi qu'il en soit, avec l'aide des informations que j'ai trouvées sur ce lien.
Résolu : Comment remplacer les guillemets doubles dans une chaîne - Communauté d'utilisateurs JMP
J'ai trouvé une méthode de force brute pour atteindre l'objectif. Ce n'est pas élégant mais ça semble fonctionner. Je suis toujours ouvert aux suggestions sur la manière de procéder de manière plus officielle.
Au revoir
Tête de clé
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 : Itération des colonnesJe ne vais généralement pas jouer avec les références de colonnes comme celle-ci dans JMP car c'est trop ennuyeux de les gérer -> J'utilise des chaînes de noms de colonnes et je les utilise au besoin avec Column(), As Column(), Eval() ou NameExpr (AsColumn()) (si, pour une raison quelconque, j'ai besoin d'utiliser des références de colonne (Column("something")) , je les convertirai en chaînes en utilisant << Get Name lorsque j'aurai besoin de les utiliser).
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 vous avez essayé d'utiliser uniquement
dt << New Column("mycol4", Numeric, Continuous, Formula(
ref1 * ref2
));
vous vous retrouverez avec une formule comme ref1*ref2 car celles-ci ne sont pas évaluées selon la formule

Quelques liens supplémentaires :
Re: Itération des colonnesJe me trompe peut-être, mais il semble que le problème que vous rencontrez est que vous utilisez des références de colonnes dans vos formules, et ce que vous devez faire est de résoudre ces références au fur et à mesure que les formules sont créées. L'exemple de Jarmo donne un exemple de ce que vous pouvez faire, mais cela peut être un peu déroutant. Vous trouverez ci-dessous une tentative d'explication du problème et de la solution dans un exemple très 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>J'espère que cela vous sera utile</P>Re: Itération des colonnesau lieu de la « force brute »
Colstring = (":"||colName);
Colref = Parse( Eval Insert(Colstring));une manière plus élégante est :
Colref= Name Expr (As Column(colName))
-> voir la réponse de @jthi .
Cela a déjà aidé de nombreux autres utilisateurs : Gestion des expressions dans JMP : Tipps et Trapdoors
d'ailleurs:
dans votre exemple, vous pouvez obtenir les Colréf( s) directement via Obtenir les noms des colonnes - supprimez simplement l'argument STRING .
Ils n'ont pas le ":" devant, mais ce n'est que du cosmétique 
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: Itération des colonnesSi vous préférez les noms de colonnes avec un « : » en tête, vous pouvez utiliser une astuce :
demandez à chacun d'eux le nom.
columnNames = current data table() << Get Column Names;
for (i=1, i<= Nitems(columnNames),i++,columnNames[i]<< get name() );
show(columnNames) // -> column names with leading ":"