Paramétrage à l'aide de JSL pour que la carte de contrôle n'affiche pas les lots pour lesquels il manque des données pour un paramètre donné.Comme le sujet.
Normalement en JSL on indique les lots (représentés par une colonne donnée) pour lesquels on présente les points sur la carte de contrôle comme suit :
Local Data Filter(
Close Outline( 1 ),
Add Filter(
columns( :Batch ),
Where(
:Batch == {"01/10/2022", "01/11/2022", "01/12/2022", "01/13/2022"}
),
Display( :Batch, N Items( 15 ), Find( Set Text( "" ) ) )
)
), Cependant, comment peut-on demander que tous les lots soient pris en compte, sauf ceux pour lesquels on a N/A (champ vide dans la table de données) pour un paramètre donné ?
Version de JMP : 16.
Automatisation et scriptsRe : Paramétrage en utilisant JSL pour que la carte de contrôle n'affiche pas les lots pour lesquels il manque des données pour un paramètre donné.Une solution consisterait à utiliser un tableau associatif pour obtenir toutes les valeurs uniques, puis à conserver uniquement les valeurs non manquantes. Ensuite, vous pouvez transmettre cela sous forme de liste au filtre de données local. Exemple ci-dessous :
Names Default To Here (1);
//open file and delete a few data points
dt = open ("$SAMPLE_DATA/Abrasion.jmp");
for each ({i}, 6::9,
:Date[i] = .
);
//get non-missing
lstdates = matrix (Associative Array (:Date) << Get Keys);
lstdates = as list(lstdates[loc(!Is Missing(lstdates))]);
//launch cc
cc = Control Chart Builder( Variables( Y( :Abrasion ) ), Show Control Panel( 0 ), );
//launch data filter
ldf = cc << Local Data Filter(
Add Filter(
columns( :Date ),
Where( :Date == lstdates ),
Display( :Date, N Items( 5 ) )
)
);
/*JMP STATISTICAL DISCOVERY LLC (“JMP”) PERMITS THE USE OF THIS COMPUTER SOFTWARE CODE (“CODE”) ON AN AS-IS BASIS AND AUTHORIZES YOU TO USE THE CODE SUBJECT TO THE TERMS LISTED HEREIN. BY USING THE CODE, YOU AGREE TO THESE TERMS. YOUR USE OF THE CODE IS AT YOUR OWN RISK. JMP MAKES NO REPRESENTATION OR WARRANTY, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRIGEMENT, AND TITLE, WITH RESPECT TO THE CODE.
You may use the Code solely as part of a software product you currently have licensed from JMP, JMP’s parent company SAS Institute Inc. (“SAS”), or one of JMP’s or SAS’s subsidiaries or authorized agents (the “Software”), and not for any other purpose. The Code is designed to add functionality to the Software but has not necessarily been tested. Accordingly, JMP makes no representation or warranty that the Code will operate error-free. JMP is under no obligation to maintain, support, or continue to distribute the Code.
Neither JMP nor its licensors shall be liable to you or any third-party for any general, special, direct, indirect, consequential, incidental, or other damages whatsoever arising out of or related to your use or inability to use the Code, even if JMP has been advised of the possibility of such damages. Except as otherwise provided above, the Code is governed by the same agreement that governs the Software. If you do not have an existing agreement with JMP or SAS governing the Software, you may not use the Code.
JMP and all other JMP Statistical Discovery LLC product or service names are registered trademarks or trademarks of JMP Statistical Discovery LLC in the USA and other countries. ® indicates USA registration. Other brand and product names are registered trademarks or trademarks of their respective companies.
*/Re : Paramétrage en utilisant JSL pour que la carte de contrôle n'affiche pas les lots pour lesquels il manque des données pour un paramètre donné.Je suis un grand fan de l'utilisation des colonnes de transformation directement à l'intérieur des plates-formes.Voici comment j'ai créé la partie carte de contrôle du script ci-dessous :
- Créer la carte de contrôle en utilisant toutes les données
- Dans le panneau de configuration, faites un clic droit sur Date et choisissez Formule
- Ajouter les fonctions Is Missing et Not pour que la formule soit vraie lorsque la colonne Date n'est pas manquante et fermez la boîte de dialogue
- Faites un clic droit sur la nouvelle colonne et renommez-la "HasDate".
- Faites un clic droit sur le triangle bleu à côté de la nouvelle colonne et changez-la en type de données Nominal
- Ajoutez un filtre de données local, la colonne transformée apparaîtra automatiquement dans la liste des colonnes disponibles
Voici ce que vous devriez obtenir :

Et voici le script pour le recréer :
Names Default To Here (1);
dt = open ("$SAMPLE_DATA/Abrasion.jmp");
dt << Control Chart Builder(
Transform Column( "HasDate", Nominal, Formula( !Is Missing( :Date ) ) ),
Variables( Y( :Abrasion ) ),
Show Control Panel( 0 ),
Local Data Filter( Add Filter( columns( :HasDate ), Where( :HasDate == 1 ) ) )
);
Si, après avoir décidé qu'il s'agit d'une colonne utile pour créer un visuel ou effectuer une analyse, vous pouvez cliquer dessus avec le bouton droit et l'ajouter au tableau de données.
Re : Paramétrage en utilisant JSL pour que la carte de contrôle n'affiche pas les lots pour lesquels il manque des données pour un paramètre donné.Très agréable, @ih !
Re : Paramétrage en utilisant JSL pour que la carte de contrôle n'affiche pas les lots pour lesquels il manque des données pour un paramètre donné.Merci. Je pense que votre réponse est proche de ce que je souhaite, et seule une légère modification du code me permettrait d'obtenir le résultat souhaité. Malheureusement, je suis au début de mon voyage avec le JMP SL, je vous serais reconnaissant si vous pouviez m'aider à obtenir un code qui mettrait pleinement en œuvre ce que je veux réaliser. Par conséquent, je vais essayer de mieux expliquer mon problème.
Je dois dire que j'utilise une boucle pour vouloir que les cartes de contrôle soient exécutées pour différents paramètres de la table de données.J'ai du mal à comprendre comment, en utilisant votre conseil précédent, je peux modifier le code pour prendre la i-ème colonne comme celle sur laquelle filtrer. J'ai essayé :Column(i), mais je ne pense pas que ce soit le cas...
Je partage un morceau de code de ma tentative d'expliquer ce que je veux dire.
For( i = 2, i <= 5, i++,
dt << Control Chart Builder(
lstdates = Matrix( Associative Array( :Column( i ) ) << Get Keys );
lstdates = As List( lstdates[Loc( !Is Missing( lstdates ) )] );
Show Two Shewhart Charts( 0 );,
Sort by Row Order( 1 ),
Include Missing Categories( 0 ),
Show Excluded Region( 0 ), //sprawdź które to które
Show Limit Summaries( 0 ),
Variables( Subgroup( :Batch ), Y( :Column( i ) ) ),
Chart(
Points( Statistic( "Individual" ) ),
Limits( Sigma( "Levey Jennings" ) ),
Warnings( Test 1( 1 ), Test 2( 1 ), Test 3( 1 ), Test 4( 1 ) )
),
ldf = cc << Local Data Filter(
Add Filter( columns( :Column( i ) ), Where( :Column( i ) == lstdates ), Display( :Column( i ), N Items( 5 ) ) )
),
SendToReport(
Dispatch( {}, "graph display 1 title", TextEditBox, {Set Text( "Levey Jennings chart of " || Nazwy[i] )} ),
Dispatch( {}, "Subgroup display 1 title", TextEditBox, {Set Text( "Batch numer" )} )
)
);
)
);
Re : Paramétrage en utilisant JSL pour que la carte de contrôle n'affiche pas les lots pour lesquels il manque des données pour un paramètre donné.Vous ne savez peut-être pas quoi devrais-je écrire à la place : Date, si je dois utiliser la boucle "for" pour chaque paramètre continu de ma table de données ?
Re : Paramétrage en utilisant JSL pour que la carte de contrôle n'affiche pas les lots pour lesquels il manque des données pour un paramètre donné.Cet exemple devrait vous montrer comment regrouper toutes les colonnes continues dans une liste, puis parcourir ces colonnes. Par ailleurs, si vous examinez plusieurs colonnes, avez-vous envisagé soit la carte de contrôle multivariée pilotée par modèle, soit la plateforme de criblage de processus ? Ces deux éléments excellent dans la rationalisation des cartes de contrôle pour plusieurs sorties.
Names Default To Here( 1 );
//open sample data table
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
//get all numeric continuous colums, return list as strings
lstcols = dt << Get Column Names( Numeric, Continuous, String );
//run an analysis for each column in the list
For Each( {i}, lstcols,
dt << Graph Builder(
Show Control Panel( 0 ),
Variables( X( :age ), Y( Column( i ) ) ), //Use each column
Elements( Points( X, Y, Legend( 3 ) ) )
)
);
/*JMP STATISTICAL DISCOVERY LLC (“JMP”) PERMITS THE USE OF THIS COMPUTER SOFTWARE CODE (“CODE”) ON AN AS-IS BASIS AND AUTHORIZES YOU TO USE THE CODE SUBJECT TO THE TERMS LISTED HEREIN. BY USING THE CODE, YOU AGREE TO THESE TERMS. YOUR USE OF THE CODE IS AT YOUR OWN RISK. JMP MAKES NO REPRESENTATION OR WARRANTY, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRIGEMENT, AND TITLE, WITH RESPECT TO THE CODE.
You may use the Code solely as part of a software product you currently have licensed from JMP, JMP’s parent company SAS Institute Inc. (“SAS”), or one of JMP’s or SAS’s subsidiaries or authorized agents (the “Software”), and not for any other purpose. The Code is designed to add functionality to the Software but has not necessarily been tested. Accordingly, JMP makes no representation or warranty that the Code will operate error-free. JMP is under no obligation to maintain, support, or continue to distribute the Code.
Neither JMP nor its licensors shall be liable to you or any third-party for any general, special, direct, indirect, consequential, incidental, or other damages whatsoever arising out of or related to your use or inability to use the Code, even if JMP has been advised of the possibility of such damages. Except as otherwise provided above, the Code is governed by the same agreement that governs the Software. If you do not have an existing agreement with JMP or SAS governing the Software, you may not use the Code.
JMP and all other JMP Statistical Discovery LLC product or service names are registered trademarks or trademarks of JMP Statistical Discovery LLC in the USA and other countries. ® indicates USA registration. Other brand and product names are registered trademarks or trademarks of their respective companies.
*/Re : Paramétrage en utilisant JSL pour que la carte de contrôle n'affiche pas les lots pour lesquels il manque des données pour un paramètre donné.Je pense que ce que je ne comprends pas, c'est pourquoi faire référence à une colonne donnée par son nom (par exemple ':name') fonctionnerait dans mon script mais par 'column(i)' ce n'est pas le cas (je sais que dans le code ci-dessus j'ai fait une erreur en écrivant :column(i ), au lieu de column(i), mais la corriger n'a rien changé...)