For Loop wertet die Formel nicht richtig aus.<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ich versuche, neue Spalten in einer Datentabelle zu erstellen. Jede neue Spalte ist der Z-Score einer vorhandenen Spalte. Hier ist was ich habe
Colnames_1st = dt_zscore3 << Spaltennamen abrufen ();
nlist = N Artikel (Colnames_1st);
für (i = 5, i <= 10, i ++,
var1 = Spalte (Colnames_1st );
Mittelwert = Col-Mittelwert (var1);
stdev = Col Std Dev (var1);
namevar = char (Colnames_1st );
Neue Spalte ("Zscore" || namevar,
Numerisch, Kontinuierlich,
Format ("Best", 12),
Formel ((((var1 []) - Mittelwert) / stdev)));
);
Der Code erstellt die 6 neuen Spalten und benennt sie korrekt.
Wenn Sie jedoch die Werte in allen Spalten eingeben, wird dies nicht korrekt ausgeführt.
Alle Spalten haben in jeder Zeile den gleichen Wert. Es sieht für mich so aus
erstellt die Spalten, wartet dann jedoch, bis die for-Schleife beendet ist, um die Spalte zu berechnen
Werte, die in jeder Zeile in allen Spalten stehen, daher wird der letzte Wert von allen verwendet
die Variablen für alle Spalten, anstatt die Formel für jede Spalte zu berechnen
Spalte mit den Werten, die von dieser Spalte verwendet werden sollen.
Ich bin wirklich festgefahren. Ich habe alles Mögliche ausprobiert, kann diese Hürde aber nicht überwinden.
Jede Hilfe wäre sehr dankbar.
Re: For Loop wertet die Formel nicht richtig aus.Ich denke, es könnte ein Problem mit Ihrer Lösung geben. Es kann funktionieren, wenn die Spalten erstellt werden, aber nicht in einer anderen Sitzung oder wenn Daten in den Quellspalten geändert oder hinzugefügt werden.
Wenn Sie sich die Formeln in den neuen Spalten ansehen, vermute ich, dass alle wie "(var1 [] - mean) / stdev" aussehen werden. Diese Variablennamen sind nur im aktuellen Skriptkontext (oder sogar innerhalb einer bestimmten Schleife für die Schleife) sinnvoll. Wenn die Variablen neu definiert oder gelöscht werden, funktionieren die Formeln nicht ordnungsgemäß.
Formeln sollten wörtlich eingegeben werden, da die Variablen im Argument Formula () anscheinend nicht ausgewertet, sondern wörtlich genommen werden. Wenn Variablen verwendet werden müssen, z. B. in einer Schleife, kann dies durch die Bearbeitung von Zeichenfolgen oder Ausdrücken erreicht werden.
Beispiel mit evalexpr () zum Auswerten von Ausdrücken in Ausdrücken vor der Auswertung:
dt = Öffnen ( "$ SAMPLE_DATA / Big Class.jmp" ) ;
n = N Col ( dt ) ;
Zum ( ich = 4 . ich <= n . ich ++
var1 = Säule ( ich ) ;
Eval (
Eval Expr (
dt << Neue Spalte ( "Zscore" || ( var1 << Name bekommen ) .
Numerisch .
Kontinuierlich .
Formel ( Col Standardisieren ( Ausdruck ( var1 ) ) )
)
)
) ;
) ;
Re: For Loop wertet die Formel nicht richtig aus.Ich glaube, ich habe endlich eine Lösung gefunden.
Ich habe das Gefühl, dass mein Problem irgendwie darin liegt, Variablen als lokal und global zu definieren, aber egal was ich versuchte, ich konnte nicht herausfinden, wie ich es auf diese Weise beheben kann.
Stattdessen habe ich die Zeile hinzugefügt
dt_zscore3 << Formeln ausführen
und jetzt macht es richtig.
Colnames_1st = dt_zscore3 << Spaltennamen abrufen ();
nlist = N Artikel (Colnames_1st);
für (i = 5, i <= nlist, i ++,
Namensvorgabe bis hier (1);
var1 = Spalte (Colnames_1st );
// var1 = Spalte (Colnames_1st );
Mittelwert = Col-Mittelwert (var1);
stdev = Col Std Dev (var1);
namevar = char (Colnames_1st );
Neue Spalte ("Zscore" || namevar,
Numerisch, Kontinuierlich,
Format ("Best", 12),
Formel ((((var1 []) - Mittelwert) / stdev)));
dt_zscore3 << Formeln ausführen
);
Dies ist möglicherweise nicht elegant oder die richtigste Art, dies zu tun, aber ich poste es für den Fall, dass jemand es für nützlich hält.