Script JSL pour le binningSalut,
J'ai une matrice clairsemée avec 1248 lignes et 2435 colonnes. Ma première colonne est CustomerID et les autres sont des produits avec la quantité commandée par chaque client comme valeur. Chaque colonne a une plage différente. Je souhaite normaliser les valeurs des colonnes entre 1 et 5 en ayant des points de coupure à 20 centiles. J'ai trouvé que le complément de binning interactif peut m'aider à accomplir si le nombre de colonnes est inférieur. Je suis nouveau sur JMP et j'apprécierais si quelqu'un pouvait m'aider avec le script JSL pour y parvenir. Le regroupement doit exclure la valeur manquante.
J'ai joint mon tableau de données pour référence. Merci d'avance.
Salutations,
Tara

Re : Script JSL pour le binningMerci Jim. Je vais recoder manuellement ces noms de colonnes. Merci encore une fois pour votre aide!.
Re : Script JSL pour le binningRemarque : Je viens de trouver un autre problème... eh bien, le même problème est plus complexe.Certaines colonnes ont des guillemets doubles dans les noms....ce qui provoque une erreur du script.......
Cela pourrait être contourné ...... mais je pense que la solution la plus simple consiste à remplacer les guillemets doubles dans les noms par des guillemets simples (manuellement), puis à exécuter le script avec la modification indiquée ci-dessous.
C'est un problème courant, et j'aurais dû me protéger pour le problème.
La 7ème colonne est nommée :
BONNE JAM JAR T-LIGHT SUPPORT
À moins d'être protégé, JMP interprétera le nom non pas comme un nom de colonne unique, mais plutôt comme 2 colonnes,
BONNE CONFITURE POT
et
PORTE LUMIÈRE
JMP essaiera alors de soustraire l'un de l'autre, car il trouve un signe moins "-" entre les 2 noms.Pour se protéger contre ces noms de colonnes complexes, JMP dispose d'une fonction appelée :Name().Donc si vous remplacez la ligne suivante dans le code :
Expr( __col__ ), Parse( ":" || Char( Column( dt, i ) << get name ) )
avec:
Expr( __col__ ), Parse( ":Name(\!"" || Char( Column( dt, i ) << get name ) || "\!")")
ça va marcher
Re : Script JSL pour le binningSalut Jim,
Merci pour votre temps et votre réponse. Le script a bien fonctionné pour les 7 premières colonnes. Je ne pouvais pas comprendre pourquoi il n'allait pas plus loin. J'ai joint le fichier jmp pour votre référence.J'ai apporté des modifications mineures à votre script : dt = Current Data Table (); , je = 2 et _col_[RowP80_100] = 5. Le repos reste le même.
Merci
Tara
Re : Script JSL pour le binningVoici un exemple de script qui devrait faire ce que vous voulez.
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 ) )
)
)
);
Le script est plus complexe qu'il ne devrait l'être.Autrement dit, il aurait pu utiliser As Column() pour remplacer chacun des points du script pointant vers une colonne, cependant, cette surcharge de calcul a rendu l'exécution du code d'environ une minute par colonne pour le traitement.La version de remplacement du code, a tout le traitement en quelques secondes.