J'ai deux variables qui sont utilisées pour définir 15 colonnes au total. Ce sont a = {"1", "2", "3", "4", "5"} et b = {"1", "2", "3"}. Actuellement, 15 colonnes sont déjà créées avec la notation Column("11"), Column("12"), Column("13"), Column("21"), alias Column(b[1] || a[1]), Colonne(b[1] || a[2]), etc...
J'ai fait la moyenne des 6 premières lignes de ces 15 colonnes existantes et je les ai placées dans un tableau de taille 15. J'ai appelé ce tableau "ave".
Donc ave[1] serait la moyenne des 6 premières lignes de Column("11"), ave[2] serait la moyenne des 6 premières lignes de Column("12"), etc...
Maintenant, ce que je voudrais faire, c'est créer 15 nouvelles colonnes préfixées par "D" en utilisant les tableaux "a" et "b". En outre, définissez une formule pour ces colonnes qui prend la colonne existante - la moyenne des 6 lignes de cette colonne.
Par exemple, la formule pour Column("D11") serait la suivante :
:Nom("11") - ave[1]
La colonne ("D12") serait la suivante :
:Nom("12") - ave[2]
Mon code :
index = 1;
For( i = 3, i > 0, i--,
For( j = 5, j > 0, j--,
at << Add Multiple Columns( "D" || b[i] || a[j], 1, numeric, continuous, );
F = Eval Expr(expr(ave[index]));
Column( "D" || b[i] || a[j] ) << Set Formula( :Name("11")-Name Expr(F) );
index = index + 1;
);
);
Le code ci-dessus ne fonctionne pas lorsque j'essaie d'incrémenter la variable d'index à travers les 15 valeurs moyennes stockées dans "ave". L'autre problème est que je dois parcourir :Name("11"), :Name("12"), etc. à travers toutes les combinaisons de a & b dans la formule. J'ai presque besoin d'un moyen de définir la formule de la manière suivante:
:Nom(b[i] || a[i])
Cependant, :Name doit utiliser une chaîne avec des guillemets entre eux et ne vous laissera pas le faire de cette façon.
J'ai essayé plusieurs méthodes avec parse, eval, etc. mais sans succès.
Toute aide serait grandement appréciée!
Merci!
Cela a fonctionné magnifiquement! Merci!
Voici un morceau de JSL qui fonctionnera.Il utilise une méthode où la chaîne de caractères exacte de ce que la commande requise doit être est générée, puis Eval(Parse()) pour exécuter le code
index = 1;
;
For( i = 3, i > 0, i--,
For( j = 5, j > 0, j--,
Eval(
Parse(
"at << New Column(\!"D" || b[i] || a[j] ||
"\!",1,numeric,continuous,Formula( :Name( \!""
|| Char( index + 10 ) || "\!" ) - " || Char( ave[index] ) || "));"
)
);
index = index + 1;
);
);