Ajout de colonnes de formules basées sur la liste des noms de colonnesSalut! J'essaie de créer un script qui générera des colonnes de formule en fonction du fait qu'un nom de colonne contient le bon mot-clé. Je pense que j'abuse de la façon dont les listes traduisent les chaînes en d'autres fonctions. J'utilise actuellement JMP 17
Ptable = Current Data Table ();
col list = Ptable << Get Column Names(String);
if(debug == 1, Print(col list));
For(i=1, i<NCOLS></NCOLS>
<LINGO-LABS id="lingo-labs-724835" slang="en-US" mode="CREATE"><LINGO-LABEL>Automatisation et scripts</LINGO-LABEL></LINGO-LABS>Re : Ajout de colonnes de formules basées sur la liste des noms de colonnesVoici une modification de votre code en utilisant la table de données Big Class comme exemple.
Names Default To Here( 1 );
Open( "$SAMPLE_DATA/big class.jmp" );
debug = 1;
Ptable = Current Data Table();
col list = Ptable << Get Column Names( String );
If( debug == 1,
Print( col list )
);
// Columns are going to be added to the data table. The For() clause
// will change the end point of the looping if ncols() is in the
// termination value
ncolumns = N Cols( Ptable );
For( i = 1, i <= ncolumns, i++,
If( Contains( col list[i], "eight" ),
// The formula equation needs to be fully parsed before applying it to
// the columns definition
Eval(
Substitute(
Expr(
New Column( col List[i] || " (kPa)",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Selected,
Formula(
(((15 / (0.016 * Num( :age[1] ))) * Num( _col_ )) - 3.75) * 6.89476
)
)
),
Expr( _col_ ), parse(col list[i] )
)
)
)
);
Re : Ajout de colonnes de formules basées sur la liste des noms de colonnesVous devez y évaluer correctement la colonne. Expr(NameExpr(AsColumn())) est une option
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
mycol1 = "height";
mycol2 = "weight";
Eval(EvalExpr(
new_col = dt << New Column("Col", numeric, continuous, formula(
Expr(NameExpr(AsColumn(dt, mycol1))) * Expr(NameExpr(AsColumn(dt, mycol2)))
))
));
show(new_col << get formula);
Insérez une expression dans une autre à l'aide d'Eval Insert, Eval Expr, Parse et Substitute
Re : Ajout de colonnes de formules basées sur la liste des noms de colonnesPeu importe ! Le problème venait de mon tableau clist qui n'intégrait pas les noms de colonnes dans une liste !
@jthi Nommer une colonne nécessite-t-il également une évaluation d'expression ? La page que vous avez partagée indiquait qu'une fonction Concat avec Char( Array[#] ) fonctionnait parfaitement, mais j'obtiens une erreur en renommant des colonnes (code ci-dessous). Je n'ajoute pas de colonnes, donc je ne comprends pas pourquoi il y aurait une incompatibilité entre les colonnes N et le compteur dans la boucle For.
clist = Ptable << Get Column Names( String );
num_col = N Cols(Ptable);
For(i=3, i < num_col, i++,
Column(i) << Set Name(Char(clist[i]) || " °C"); //Error on this line
);
"Plage d'indices dans l'accès ou l'évaluation de 'clist[ /*###*/i]' , clist[/*###*/i]"