Script JSL per il binningCiao,
Ho una matrice sparsa con 1248 righe e 2435 colonne. La mia prima colonna è CustomerID e le rimanenti sono i prodotti con la quantità ordinata da ciascun cliente come valore. Ogni colonna ha un intervallo diverso. Voglio standardizzare i valori delle colonne su 1 - 5 avendo punti di taglio a 20 percentile. Ho scoperto che il componente aggiuntivo di binning interattivo può aiutarmi a ottenere risultati se il numero di colonne è inferiore. Sono nuovo di JMP e apprezzerei se qualcuno potesse aiutarmi con lo script JSL per raggiungere questo obiettivo. Il binning dovrebbe escludere il valore mancante.
Ho allegato la mia tabella di dati per riferimento. Grazie in anticipo.
Saluti,
Tara

Re: script JSL per il binningGrazie Jim. Ricodificherò manualmente quei nomi di colonna. Grazie ancora per il tuo aiuto!.
Re: script JSL per il binningNota: ho appena trovato un altro problema... beh, lo stesso problema è più complesso.Alcune delle colonne hanno virgolette doppie nei nomi.... che causa errori nello script....
Questo potrebbe essere aggirato ... ma penso che la soluzione più semplice sia cambiare le virgolette doppie nei nomi in virgolette singole (manualmente) e quindi eseguire lo script con la modifica annotata di seguito.
Questo è un problema comune e avrei dovuto proteggerlo per il problema.
La 7a colonna è denominata:
PORTA T-LIGHT BONNE MARMELLATA
A meno che non sia protetto, JMP interpreterà il nome non come un nome di colonna singola, ma piuttosto come 2 colonne,
BONNE MARMELLATA VASO T
e
PORTA LUCE
JMP proverà quindi a sottrarre uno dall'altro, poiché trova un segno meno "-" tra i 2 nomi.Per proteggersi da questi nomi di colonne complessi, JMP ha una funzione chiamata :Name().Quindi, se sostituisci la seguente riga nel codice:
Expr( __col__ ), Parse( ":" || Char( Column( dt, i ) << get name ) )
insieme a:
Expr( __col__ ), Parse( ":Name(\!"" || Char( Column( dt, i ) << get name ) || "\!")")
Funzionerà
Re: script JSL per il binningCiao Jim,
Grazie per il tuo tempo e per la risposta. Lo script ha funzionato bene per le prime 7 colonne. Non riuscivo a capire perché non procede oltre. Ho allegato il file jmp come riferimento.Ho apportato piccole modifiche al tuo script: dt = Current Data Table (); , io = 2 e _col_[RigaP80_100] = 5. Il riposo rimane lo stesso.
Grazie
Tara
Re: script JSL per il binningEcco uno script di esempio che dovrebbe fare quello che vuoi.
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 ) )
)
)
);
La sceneggiatura è più complessa di quanto dovrebbe essere.Cioè, avrebbe potuto utilizzare As Column() per sostituire ciascuno dei punti nello script che puntava a una colonna, tuttavia, questo sovraccarico di calcolo ha reso l'esecuzione del codice, circa un minuto per colonna per l'elaborazione.La versione sostitutiva del codice, ha l'intera elaborazione in pochi secondi.