Ich habe zwei Variablen, die zum Definieren von insgesamt 15 Spalten verwendet werden. Sie sind a = {"1", "2", "3", "4", "5"} und b = {"1", "2", "3"}. Derzeit sind bereits 15 Spalten mit der Notation Column("11"), Column("12"), Column("13"), Column("21"), auch bekannt als Column(b[1] ||, erstellt a[1]), Spalte(b[1] || a[2]), etc...
Ich habe den Durchschnitt der ersten 6 Zeilen dieser 15 vorhandenen Spalten gebildet und ihn in ein Array der Größe 15 eingefügt. Ich habe dieses Array „ave“ genannt.
Also wäre ave[1] der Durchschnitt der ersten 6 Zeilen in Spalte(„11“), ave[2] wäre der Durchschnitt der ersten 6 Zeilen in Spalte(„12“) usw.
Jetzt möchte ich 15 neue Spalten mit dem Präfix „D“ erstellen und dabei sowohl die Arrays „a“ als auch „b“ verwenden. Legen Sie außerdem eine Formel für die Spalten fest, die die vorhandene Spalte übernimmt – also die durchschnittlichen 6 Zeilen dieser Spalte.
Die Formel für Column("D11") würde beispielsweise wie folgt aussehen:
:Name("11") - ave[1]
Spalte("D12") wäre die folgende:
:Name("12") - ave[2]
Mein 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;
);
);
Der obige Code funktioniert nicht, wenn ich versuche, die Indexvariable um die 15 in „ave“ gespeicherten Durchschnittswerte zu erhöhen. Das andere Problem besteht darin, dass ich :Name("11"), :Name("12") usw. durch alle Kombinationen von a und b in der Formel durchlaufen muss. Ich brauche fast eine Möglichkeit, die Formel folgendermaßen festzulegen:
:Name(b[i] || a[i])
Allerdings muss :Name eine Zeichenfolge mit Anführungszeichen dazwischen verwenden und lässt dies nicht zu.
Ich habe mehrere Methoden mit Parse, Eval usw. ausprobiert, aber ohne Erfolg.
Jede Hilfe wäre sehr dankbar!
Danke schön!
Das hat wunderbar funktioniert! Danke schön!
Hier ist ein Stück JSL, das funktionieren wird.Es verwendet eine Methode, bei der die genaue Zeichenfolge des erforderlichen Befehls generiert wird, und anschließend Eval(Parse()), um den Code auszuführen
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;
);
);