Utilisation d'objets numériques dans une équation de colonneJe dois pouvoir utiliser un objet numérique qui augmente ou diminue dans une fonction itérative dans une formule de colonne. Dans l'équation ci-dessous, les valeurs de col, l et m doivent être évaluées dans la formule de colonne. Comment puis-je y parvenir ? Parse(), Eval() et Num() ne fonctionnent pas.
For( i = 1, i <=8, i++,
col = 11+i;
l = col - i;
m = col + 1 - i;
colno = Char(col);
New Column("Column "||colno, Character, "Nominal", Formula(If(Row() == 12, Lag(Column(1), l), If(Row() == 13, Lag(Column(2), m), Lag(Column(col, 1)))))));
Automatisation et scriptsRe : Utilisation d'objets numériques dans une équation en colonneCela semble fonctionner. Eval( Eval Expr(....) ) évalue les expressions avant de créer la colonne.
For( i = 1, i <= 8, i++,
col = 11 + i;
l = col - i;
m = col + 1 - i;
colno = Char( col );
Eval(
Eval Expr(
New Column( "Column " || Expr( colno ),
Character,
"Nominal",
Formula(
If( Row() == 12,
Lag( Column( 1 ), Expr( l ) ),
If( Row() == 13,
Lag( Column( 2 ), Expr( m ) ),
Lag( Column( Expr( col ), 1 ) )
)
)
)
)
)
);
);
Re : Utilisation d'objets numériques dans une équation en colonneColumn( col, 1 )
?

Re : Utilisation d'objets numériques dans une équation en colonneAucune variable définie en dehors du nouveau message de colonne ne doit être utilisée à l'intérieur du nouveau message column() .
Dans mon entreprise, nous avons un contrôle automatique qui détecte ces problèmes de programmation avant d'exécuter le code.
Si une erreur potentielle est détectée, un message d’avertissement est présenté à l’utilisateur avec quelques suggestions.
Re : Gestion des expressions dans JMP : astuces et trappes
For( i = 1, i <= 8, i++,
col = 11 + i;<BR />
l = col - i;
m = col + 1 - i;
colno = Char( col );
Eval(Eval Expr(New Column( "Column " || colno,
Character,
"Nominal",
Formula(
If( Row() == 12,
Lag( Column( 1 ), Expr(l) ),
If( Row() == 13,
Lag( Column( 2 ), Expr(m) ),
Lag( Expr(Name Expr(As Column( col))), 1 )
)
)
)))
);
);
Aïe ! Comme la colonne ne comprend pas les nombres…
Re : Utilisation d'objets numériques dans une équation en colonneFor( i = 1, i <= 8, i++,
col = 11 + i;
colname = Column(col) << get name;
l = col - i;
m = col + 1 - i;
colno = Char( col );
Eval(Eval Expr(New Column( "Column " || colno,
Character,
"Nominal",
Formula(
If( Row() == 12,
Lag( Column( 1 ), Expr(l) ),
If( Row() == 13,
Lag( Column( 2 ), Expr(m) ),
Lag( Expr(Name Expr(As Column( colname))), 1 )
)
)
)))
);
);
Re : Utilisation d'objets numériques dans une équation en colonneBonne prise.
Re : Utilisation d'objets numériques dans une équation en colonne@hogi
J'obtiens une modification du script de mmarchandFSLR (illustrée ci-dessous) qui fonctionne parfaitement ; excellent ajout. Je ne suis pas sûr de comprendre le problème. Pourriez-vous clarifier ?
dt = Current Data Table();
Delete Symbols();
dt = Current Data Table();
For( i = 1, i <= 8, i++,
c = 11 + i;
l = 12 - i;
m = 13 - i;
colno = Char( c );
Eval(Eval Expr(New Column( "Column " || colno,
Character,
"Nominal",
Formula(
If( Row() == 12,
Lag( As Column( 1 ), Expr(l) ),
If( Row() == 13,
Lag( As Column( 2 ), Expr(m) ),
Lag( As Column( Expr(c)) , 1)
)
)
)))
);
);
Re : Utilisation d'objets numériques dans une équation en colonneTout d'abord, j'ai été stupéfait de constater que même après avoir corrigé les détails autour
Column( col, 1 )
La solution de @mmarchandFSLR ne semble pas fonctionner.
Décalage() attend Comme colonne() , pas une colonne() ?!??!
Cela détruit toutes mes « connaissances » sur l’utilisation de Comme colonne() pour accéder à la valeur de la ligne actuelle !
Concernant En tant que colonne (col) au lieu de Name Expr(As column(col)) :
Cela fonctionne - mais c'est « fragile » face à :
- ajout d'une colonne (le numéro n'est pas mis à jour !)
- entrées modifiées (sur mon système, les entrées de la colonne de formule ne sont pas mises à jour?!?)
[Je supprimerai celui-ci si la situation s'améliore après un redémarrage]
Re : Utilisation d'objets numériques dans une équation en colonneCela semble mériter d'être documenté :
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
New Column( "height 2", Formula( :height ));
New Column( "height 3", Formula( As Column( "height" ) ));
New Column( "height 4", Formula( As Column( 4 ) ));
New Column( "height 5", Formula( Column( 4 )[Empty()] ));
wait(0);
dt[5::10, "height"] = 1;
wait(0);
New window(<< type("modal dialog"), Text Box ("just height 1 got updated ... continue"));
dt << Move Selected Columns( {:height}, after( :name ) );
New window(<< type("modal dialog"), Text Box ("no big difference - now let's recalc"));
dt << rerun formulas();
avant après

- L'interpréteur de la formule de colonne comprend Column(4) et As Column(4), Column("height") et ainsi de suite....
Mais le mécanisme de mise à jour des colonnes si les colonnes d'entrée changent ne fonctionne pas ? Faut-il déclencher la mise à jour manuellement ?
- Lorsque la colonne est déplacée vers un autre emplacement, le numéro n'est pas mis à jour.
Je n'utiliserai jamais de chiffres dans les références de colonnes !
Je n'utiliserai jamais quelque chose comme Colonne (« hauteur »)
Fait amusant :
L'éditeur de formules ne l'aime pas non plus :

Re : Utilisation d'objets numériques dans une équation en colonneJ'aurais dû décrire mon sombre dessein. J'ai une table qui hésite entre une table haute et une table large. Les colonnes 1 et 2, lignes 1 à 8, sont hautes, et les colonnes 1 à 11 deviennent une table large après la ligne 12. Ce script est la première étape pour donner un peu de sens à ce tableau.
avant après

J'effectue une série d'étapes supplémentaires pour traiter les données, mais c'était la partie la plus délicate.