Automatisation de la carte de contrôle avec plusieurs colonnes de date et de donnéesBonjour,
J'essaie d'automatiser un moyen de construire des graphiques de contrôle à partir d'un tableau formaté comme ci-dessous,
| Moteur | 314-Date | 314-Paramètre 1 | 314 paramètres 2 | 314 paramètres ect. | 213-paramètre 1 | 213- date | 241 paramètres 1 | 241 paramètres 2 | 241-Date |
| # | rendez-vous amoureux | # | # | # | # | rendez-vous amoureux | # | # | rendez-vous amoureux |
| # | rendez-vous amoureux | # | # | # | # | rendez-vous amoureux | # | # | rendez-vous amoureux |
J'ai ce code qui me rapproche de ce que je veux.
Rcols = dt << GetColumnNames( Continuous, String );
nw = New Window( "Control Charts", myVLB = V List Box() );
For( i = 1, i <= N Items( Rcols ), i++,
cc = Control Chart(
Sample Label( Column( dt, Rcols[1] ) ),
KSigma( 3 ),
Chart Col( Column( dt, Rcols[i] ), Levey Jennings )
);
myVLB << Append( Report( cc ) );
cc << close window;
);
Cependant, le problème est maintenant de trouver un moyen de donner à l’étiquette de l’échantillon la date correcte pour l’ID des paramètres. Il n'y a pas des quantités égales de paramètres pour chaque ID et la table n'est donc pas uniforme, ce qui rend également la tâche un peu plus difficile.
Merci!
Re: automatisation de la carte de contrôle avec plusieurs colonnes de date et de donnéesCela signifie que l'élément dans lequel vous essayez d'insérer n'est pas une liste. Dans ce code:
a=3;
insert into(c,a)
vous obtiendrez l'erreur, car la variable "c" n'a pas été définie comme liste.
Re: automatisation de la carte de contrôle avec plusieurs colonnes de date et de donnéesHey Jim, je pense que c'est vraiment proche de ce dont j'ai besoin. Je reçois une erreur qui est:
Peut insérer uniquement dans une valeur L dans l'accès ou l'évaluation de 'Insérer dans'
Pourriez-vous éclairer un peu ce que cela signifie?
Merci
Re: automatisation de la carte de contrôle avec plusieurs colonnes de date et de donnéesJim, posté avant d'avoir fini ma solution ... encore. Mon approche est à peu près la même, mais j'aime utiliser une fonction créée pour travailler avec des listes, ce qui réduit beaucoup de code. La fonction que j'appelle Lfunc (list, expr) exécute l'expression sur chaque élément de la liste. [Cela a longtemps été un élément de la liste de souhaits JMP].
Ainsi, la 3ème ligne de la JSL ci-dessous renvoie [2, 7, 10] pour l'exemple que vous avez fourni. Pour chacune de ces colonnes, j'obtiens le code et la ligne commençant par "params =" renvoie toutes les colonnes (ne contenant pas la date) commençant par ce code.
Hormis une approche alternative et souhaitant à nouveau une fonction intégrée JMP similaire à Lfunc (), j’ai remarqué que vous créez des graphiques de contrôle inactifs et c’est peut-être votre objectif. Si vous souhaitez des graphiques interactifs "en direct", pour la mise en évidence et le survol de l'aide, consultez le code commenté dans le fichier joint FindColumns_CC.jsl
dt=current data table();
Rcols = dt << GetColumnNames(String ); //get all coumns so the code can use the column number
dateCols = Loc(Matrix(Lfunc(RCols, Expr(Contains(Lowercase(x),"date"))))); //2,7,10
nw = New Window( "Control Charts", myVLB = V List Box() );
for(i=1, i<=nrow(dateCols), i++,
code = Trim(word(1, Rcols[dateCols[i]], "-"));
params = Loc(Matrix(Lfunc(RCols, Expr(StartsWith(x,code) & !Contains(lowercase(x),"date")) )));
Re: automatisation de la carte de contrôle avec plusieurs colonnes de date et de donnéesJe crois avoir compris votre question. J'ai choisi de rechercher tous les groupes dans les données et de créer une liste séparée des colonnes figurant dans chacune des listes. Ensuite, les groupes sont bouclés et chacune des colonnes de cette liste est traitée. Je n'ai pas de tableau de données pour tester ma solution. Je pense donc que le code doit être utilisé comme un bon guide pour résoudre le problème. problème, mais ne devrait pas être considéré comme une solution définitive
Rcols = dt << GetColumnNames( Continuous, String );
// Process the columns into group and separate lists for each group
groupList = {};
For( i = 2, i <= N Items( Rcols ), i++,
theGroup = Word( 1, Rcols[i], "-" );
// Check if the group has been seen before
If( Contains( groupList, theGroup ) > 0,
// If this is a new group, create a list to hold the column names
Eval( Parse( "Group_" || theGroup || " = {};" ) );
// Add the group name to the groupList
Insert Into( groupList, theGroup );
// Add the current parameter to the new group list
Insert Into( "Group_" || theGroup, Rcols[i] );
,
// If this isn't a new group list, then add it to the
// already existing group list
Insert Into( "Group_" || theGroup, Rcols[i] )
);
);
// Create the display window
nw = New Window( "Control Charts", myVLB = V List Box() );
// Loop across the groups
For( group = 1, group <= N Items( groupList ), group++,
// Set a standard list name to have the values of the current Group_list
Eval( Parse( "tempRcols = Group_" || groupList[group] || ";" ) );
// Generate the charts
For( i = 2, i <= N Items( tempRcols ), i++,
cc = Control Chart(
Sample Label( Column( dt, tempRcols[1] ) ),
KSigma( 3 ),
Chart Col( Column( dt, tempRcols[i] ), Levey Jennings )
);
myVLB << Append( Report( cc ) );
cc << close window;
);
);