Ich habe Probleme damit, dass die Spaltenstatistiken in einer Schleife funktionieren.Ich versuche, ein Skript zu schreiben, das Ausreißer aus mehreren Spalten in einer Tabelle entfernt, indem eine Schleife verwendet wird, um jeden Spaltennamen zu betrachten und an eine Funktion zu übergeben, die die folgende Codezeile enthält, um das 99. Perzentil zu ermitteln.
test_upper_quantile = Col Quantile (Spalte (Testnummer), 0,99);
Ich verwende dann eine For Each Row-Schleife, um die Werte mit dem berechneten Perzentil zu vergleichen und alle Zeilen zu entfernen, die außerhalb dieses Bereichs liegen.
Der Code funktioniert gut, wenn ich nur eine Spalte mache. Wenn ich jedoch die Schleife mit mehreren Spalten in die Test_Number-Variable einrichte, verwendet jmp immer den Wert des Quantils, das zuerst für die erste Spalte berechnet wurde . Die Schleife scheint korrekt eingerichtet zu sein, da sie die Variable Test_Number im Protokoll anzeigt. Diese Änderung ändert sich entsprechend der erwarteten Spalte. Wenn ich also 10 Spalten mache, werden die 10 richtigen Spaltennamen angezeigt, aber nur das Quantil der ersten Spalte wird 10 Mal wiederholt.
Auch wenn das Skript beendet ist, wenn ich die Codezeile unten markiere, berechnet es den Wert für die letzte Spalte, die es richtig gefunden hat.
test_upper_quantile = Col Quantile (Spalte (Testnummer), 0,99);
Ich habe versucht, das globale test_upper_quantile zu löschen, das den Quantilwert zu Beginn der Funktion enthält, aber das macht keinen Unterschied?
Irgendwelche Ideen? Ich habe bemerkt, als Sie den Mauszeiger über den Spaltenquantil-Befehl bewegen, der besagt, dass er zwischengespeichert wird. Ist dies mein Problem, wenn es eine Möglichkeit gibt, den Cache zu löschen?
Die vollständige Funktion wird angezeigt
remove_outliers = Funktion ({Test_Number},
show (test_number);
test_lower_quantile = Col Quantile (Spalte (Testnummer), 0,01);
test_upper_quantile = Col Quantile (Spalte (Testnummer), 0,99);
show (test_upper_quantile);
lower_cutoff = test_lower_quantile;
upper_cutoff = test_upper_quantile;
Für jede Reihe(
If (Column (test_number) [] Ausgeschlossen (Row State ()) = 1
);
Wenn (Column (test_number) []> upper_cutoff,
Ausgeschlossen (Row State ()) = 1
);
);
);
Nachricht wurde bearbeitet von: apedenRe: Ich habe Probleme damit, dass die Spaltenstatistiken in einer Schleife funktionieren.<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Versuchen Sie die Funktion Als Spalte (), um das, was Sie aus dem Col List Box () << erhalten, in eine Spaltenreferenz zu konvertieren.
Namensvorgabe bis hier ( 1 ) ;
dt = Öffnen ( "$ SAMPLE_DATA / löslichkeit.jmp" ) ;
nw = Neues Fenster ( "Spalten für Quantile auswählen" .
Pfund = Col List Box ( alles ) .
Button Box ( "OK" .
Cols = Pfund << ausgewählt werden ;
nw << Fenster schließen ;
)
) ;
Zum ( ich = 1 . ich <= N Artikel ( Cols ) . ich ++
Show ( Col Quantile ( Als Spalte ( Cols [ ich ] ) . .5 ) )
) ;
-Jeff
Re: Ich habe Probleme damit, dass die Spaltenstatistiken in einer Schleife funktionieren.Hallo Jeff,
Ihr Code funktioniert auch für mich. Es ist meinem Code sehr ähnlich, der einzige Unterschied, den ich sehen kann, ist, wie die Spaltennamenliste generiert wird. Von einem Dialogfenster aus verwende ich:
| | | | ButtonBox ("Ok", |
| | | | | yParamNames = colListY << get Items; |
Diese gibt eine Liste von Zeichenfolgen zurück, wobei jeder Spaltenname in Anführungszeichen steht. colListY ist ein Spaltenlistenfeld, das vom Benutzer ausgefüllt wird.
Ich habe einen so-so-Workaround gefunden. Es packt alles in der Spalte, anstatt JMP die Arbeit erledigen zu lassen. Die Kehrseite der Problemumgehung, die ich sehe, ist, dass sie ausgeblendete und ausgeschlossene Daten nicht ignoriert, es sei denn, ich programmiere das manuell in.
tempList1 = {} ; tempList1 = Säule ( dtData . yParamList [ ich ]) << als Matrix erhalten ; medVal [ ich ] = Quantil ( 0,5 . tempList1 ) ; q1Val [ ich ] = Quantil ( 0,25 . tempList1 ) ; q3Val [ ich ] = Quantil ( 0,75 . tempList1 ) ; // medVal = col quantile (Spalte (dtData, yParamList) 0,5); // q1Val = col quantile (Spalte (dtData, yParamList) 0,25); // q3Val = col quantile (Spalte (dtData, yParamList) 0,75); | |
Re: Ich habe Probleme damit, dass die Spaltenstatistiken in einer Schleife funktionieren.Vielleicht könnten Sie Code schreiben, der Ihnen Schwierigkeiten bereitet.
Das funktioniert für mich:
dt = öffnen ( "$ SAMPLE_DATA / Löslichkeit.jmp" ) ;
nc = dt << Spaltennamen erhalten ( Numerisch ) ;
zum ( ich = 1 . ich <= Nitems ( nc ) . ich ++
Show ( Col-Quantil ( Säule ( nc [ ich ]) . .5 )) ;
) ;
/ *:
Col Quantile (Spalte (nc 0,5) = 1,36;
Col Quantile (Spalte (nc 0,5) = 1,21;
Col Quantile (Spalte (nc ), 0,5) = 0,95;
Col Quantile (Spalte (nc 0,5) = 0,445;
Col Quantile (Spalte (nc 0,5) = -0,015;
Col Quantile (Spalte (nc 0,5) = -0,62;
Re: Ich habe Probleme damit, dass die Spaltenstatistiken in einer Schleife funktionieren.Ich weiß, dass dieser Beitrag Jahre alt ist, aber gibt es eine Lösung für dieses Problem? Ich sehe genau dasselbe. Die Verwendung von col quantile in einer Schleife führt dazu, dass nur die erste Iteration der Schleife in meiner Liste gespeichert wird.
Gibt es eine Problemumgehung, um Quantil-Daten zu erhalten, bei denen die Funktion col quantile () nicht verwendet wird? Ich möchte eigentlich keine Übersichtstabellen (Zusammenfassung mit Quantil-Daten) erstellen, da dadurch die Ausführungszeit für mehrere tausend Spalten erhöht wird.
Vielen Dank