Script JSL para binningHola,
Tengo una matriz dispersa con 1248 filas y 2435 columnas. Mi primera columna es CustomerID y el resto son productos con la cantidad pedida por cada cliente como valor. Cada columna tiene un rango diferente. Quiero estandarizar los valores de las columnas a 1 - 5 teniendo puntos de corte en el percentil 20. Encontré que el complemento interactivo de binning puede ayudarme a lograrlo si el número de columnas es menor. Soy nuevo en JMP y apreciaría si alguien pudiera ayudarme con el script JSL para lograr esto. El agrupamiento debe excluir el valor faltante.
He adjuntado mi tabla de datos para referencia. Gracias por adelantado.
Saludos,
Tara

Re: Script JSL para binningGracias jim Recodificaré manualmente esos nombres de columna. Gracias una vez más por tu ayuda !.
Re: Script JSL para binningNota: Acabo de encontrar otro problema ... bueno, el mismo problema es más complejo. Algunas de las columnas tienen comillas dobles en los nombres ... lo que hace que la secuencia de comandos produzca un error .......
Esto podría solucionarse ... pero creo que la solución más sencilla es cambiar las comillas dobles en los nombres a comillas simples (manualmente) y luego ejecutar el script con el cambio que se indica a continuación.
Este es un problema común, y debería haber protegido para el problema.
La séptima columna se llama:
BONNE JAM JAR T-LIGHT HOLDER
A menos que esté protegido, JMP interpretará el nombre no como un solo nombre de columna, sino más bien como 2 columnas,
BONNE JAM JAR T
y
SOPORTE DE LUZ
JMP intentará restar uno de otro, porque encuentra un signo menos, "-" entre los 2 nombres. Para protegerse contra estos complejos nombres de columna, JMP tiene una función llamada: Nombre (). Así que si reemplaza la siguiente línea en el código:
Expr( __col__ ), Parse( ":" || Char( Column( dt, i ) << get name ) )
con:
Expr( __col__ ), Parse( ":Name(\!"" || Char( Column( dt, i ) << get name ) || "\!")")
funcionará
Re: Script JSL para binningHola Jim,
Gracias por su tiempo y respuesta. El script funcionó bien para las primeras 7 columnas. No pude averiguar por qué no sigue adelante. He adjuntado el archivo jmp para su referencia. Hice cambios menores en su script: dt = Current Data Table (); , i = 2 y _col_ [RowP80_100] = 5. El descanso sigue siendo el mismo.
Gracias
Tara
Re: Script JSL para binningAquí hay una secuencia de comandos de muestra que debe hacer lo que quieres.
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 ) )
)
)
);
El guión es más complejo de lo que debería ser. Es decir, podría haber usado As Column () para reemplazar cada uno de los puntos en el script que apuntaba a una columna; sin embargo, esta sobrecarga de cómputo hizo que el código se ejecutara, aproximadamente un minuto por columna para procesarlo. La versión sustituta del código, tiene todo el procesamiento en unos pocos segundos.