JSL-Skript für das BinningHi,
Ich habe eine dünnbesetzte Matrix mit 1248 Zeilen und 2435 Spalten. Meine erste Spalte ist CustomerID und die verbleibenden sind Produkte mit der von jedem Kunden bestellten Menge als Wert. Jede Spalte hat einen anderen Bereich. Ich möchte die Spaltenwerte auf 1 - 5 standardisieren, indem ich Schnittpunkte bei 20 Perzentil habe. Ich habe festgestellt, dass das interaktive Binning-Add-In mir helfen kann, wenn die Anzahl der Spalten geringer ist. Ich bin neu bei JMP und würde mich freuen, wenn mir jemand mit JSL-Skript helfen könnte, dies zu erreichen. Beim Binning sollte der fehlende Wert ausgeschlossen werden.
Ich habe meine Datentabelle als Referenz beigefügt. Vielen Dank im Voraus.
Grüße,
Tara

Betreff: JSL-Skript zum BinningDanke Jim. Ich werde diese Spaltennamen manuell neu codieren. Nochmals vielen Dank für Ihre Hilfe!.
Betreff: JSL-Skript zum BinningHinweis: Ich habe gerade ein anderes Problem gefunden ... nun, das gleiche Problem ist komplexer.Einige der Spalten haben doppelte Anführungszeichen in den Namen .... das führt dazu, dass das Skript einen Fehler ausgibt ....
Dies könnte umgangen werden ... aber ich denke, die einfachste Lösung besteht darin, die doppelten Anführungszeichen in den Namen (manuell) in einfache Anführungszeichen zu ändern und dann das Skript mit der unten angegebenen Änderung auszuführen.
Dies ist ein häufiges Problem, und ich hätte mich vor diesem Problem schützen sollen.
Die 7. Spalte heißt:
BONNE MARMELADE GLAS T-LIGHT HALTERUNG
Sofern nicht geschützt, interpretiert JMP den Namen nicht als einzelnen Spaltennamen, sondern als 2 Spalten.
BONNE-MARMELADEGLAS T
und
LICHTHALTER
JMP versucht dann, das eine vom anderen zu subtrahieren, da es ein Minuszeichen „-“ zwischen den beiden Namen findet.Zum Schutz vor diesen komplexen Spaltennamen verfügt JMP über eine Funktion namens :Name().Wenn Sie also die folgende Zeile im Code ersetzen:
Expr( __col__ ), Parse( ":" || Char( Column( dt, i ) << get name ) )
mit:
Expr( __col__ ), Parse( ":Name(\!"" || Char( Column( dt, i ) << get name ) || "\!")")
es wird klappen
Betreff: JSL-Skript zum BinningHallo Jim,
Vielen Dank für Ihre Zeit und Antwort. Das Skript funktionierte gut für die ersten 7 Spalten. Ich konnte nicht herausfinden, warum es nicht weiter geht. Ich habe die JMP-Datei als Referenz beigefügt.Ich habe kleinere Änderungen an Ihrem Skript vorgenommen: dt = Current Data Table (); , i = 2 und _col_[RowP80_100] = 5. Der Rest bleibt gleich.
Vielen Dank
Tara
Betreff: JSL-Skript zum BinningHier ist ein Beispielskript, das tun sollte, was Sie wollen.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\Semiconductor Capability.jmp" );
For( i = 5, i <= N Cols( dt ), i++,
Eval(
Substitute(
Expr(
RowsP0_20 = dt << get rows where( __col__ <= Col Quantile( __col__, .2 ) );
RowsP20_40 = dt << get rows where(
__col__ > Col Quantile( __col__, .2 ) & __col__ <=
Col Quantile( __col__, .4 )
);
RowsP40_60 = dt << get rows where(
__col__ > Col Quantile( __col__, .4 ) & __col__ <=
Col Quantile( __col__, .6 )
);
RowsP60_80 = dt << get rows where(
__col__ > Col Quantile( __col__, .6 ) & __col__ <=
Col Quantile( __col__, .8 )
);
RowsP80_100 = dt << get rows where( __col__ > Col Quantile( __col__, .8 ) );
__col__[RowsP0_20] = 1;
__col__[RowsP20_40] = 2;
__col__[RowsP40_60] = 3;
__col__[RowsP60_80] = 4;
__col__[RowsP80_100] = 1;
),
Expr( __col__ ), Parse( ":" || Char( Column( dt, i ) << get name ) )
)
)
);
Das Skript ist komplexer als es sein müsste.Das heißt, es hätte As Column() verwenden können, um jeden der Punkte im Skript zu ersetzen, die auf eine Spalte zeigten, aber dieser Rechenaufwand machte die Ausführung des Codes etwa eine Minute pro Spalte für die Verarbeitung.Die Ersatzversion des Codes verarbeitet das Ganze in wenigen Sekunden.