Comparaison de cellule avec sortie conditionnelleSalut,
j'essaie de créer un compter d'occurrences en fonction des conditions, en utilisant le tableau ci-dessous comme exemple. Les conditions pour un décompte de 1 sont que les colonnes "Paramètre" ET "Emplacement" se répètent ensemble dans la ligne suivante OU n'importe où ailleurs dans les 2 colonnes. La table de sortie aurait les mêmes données de colonne présentes dans la table d'origine avec 3 colonnes supplémentaires de "Count", "Tool 1", "Tool 2" (le nombre d'outils peut augmenter jusqu'à 5).

La sortie de ce tableau serait la suivante. Étant donné que les lignes 3 et 4 se répètent selon la condition de 2 colonnes (paramètre et emplacement) qui serait un décompte de 1, puis il se répète à nouveau avec les mêmes conditions qui seraient le 2e décompte pour un total de 2. La ligne à afficher dépendra de la première des 3 lignes par ordre de date. Enfin, la colonne Outil se remplirait également par ordre de date (c'est-à-dire que l'outil 1 (ou E) est arrivé en premier à 13h10, puis l'outil 2 (ou F) est arrivé à 14h10), etc.

Tableau de donnéesRe : Comparaison de cellules avec une sortie conditionnelleVoici un script qui devrait vous donner un bon départ dans votre conversion de données
Names Default To Here( 1 );
// Create a sample table
dt = New Table( "Sample",
Add Rows( 6 ),
Set Header Height( 46 ),
New Column( "Date/Time",
Numeric,
"Continuous",
Format( "y/m/d h:m", 19 ),
Input Format( "y/m/d h:m" ),
Set Values( [3273127800, 3273124200, 3273142200, 3273138600, 3273152400, 3273149400] )
),
New Column( "Parameter", Character, "Nominal", Set Values( {"A.1", "A.2", "A.3", "A.3", "A.2", "A.3"} ) ),
New Column( "Location", Character, "Nominal", Set Values( {"B.1", "B.2", "B.3", "B.3", "B.1", "B.3"} ) ),
New Column( "Process", Character, "Nominal", Set Values( {"C.1", "C.2", "C.3", "C.3", "C.1", "C.3"} ) ),
New Column( "Tool", Character, "Nominal", Set Values( {"E.", "E", "F", "E", "E", "G"} ), Set Display Width( 43 ) ),
New Column( "Part", Character, "Nominal", Set Values( {"F-1.1", "F-1.2", "F-1.1", "F-1.1", "F-1.1", "F-1.1"} ) )
);
// The calculation script starts here
// Calculate the Counts
dtSum = dt << Summary(
Group( :Parameter, :Location ),
Freq( "None" ),
Weight( "None" ),
Link to original data table( 0 ),
output table name( "Summary" )
);
// Delete rows that have no matches
dtSum << select where( dtSum:N Rows == 1 );
If( N Items( dtSum << get selected rows ) > 0,
dtSum << delete Rows
);
// The count is equal to how many rows, not how many matches so subtract 1 to count the matches
For Each Row(
dtSum:N Rows = dtSum:N Rows - 1;
);
dtSum:N Rows << set name("Count");
// Create a new table from original that contains only the data with matches
dtJoin = dt << Join(
With( dtSum ),
Merge Same Name Columns,
Match Flag( 0 ),
By Matching Columns( :Parameter = :Parameter, :Location = :Location ),
Drop multiples( 0, 0 ),
Include Nonmatches( 0, 0 ),
Preserve main table order( 1 ),
Output Table( "Joined" )
);
// Sort the data to set tool usage order
dtJoin << Sort( By( :Parameter, :Location, :"Date/Time"n), Replace Table(1));
// Create a new column for tool order
dtJoin << New Column("Tool Col", character, set each value(
"Tool " || Char( Col Cumulative Sum(1, :Parameter, :Location))
));
// Split the data to the final output for
dtFinal = dtJoin << Split(
Split By( :Tool Col ),
Split( :Tool ),
Group( :Parameter, :Location ),
Output Table( "Final" ),
Sort by Column Property
);
// Clean up
close( dtSum, nosave );
close( dtJoin, nosave );
La documentation sur les différentes plates-formes et fonctions est documentée dans l'index de script et dans le guide de script.Les deux sont disponibles dans le menu déroulant Aide.
Re : Comparaison de cellules avec une sortie conditionnelleBonjour,
Je * pense * voir ce que vous cherchez, mais comme Jim le mentionne, plus de contexte, c'est mieux. Ce qui suit produit la sortie que vous décrivez, pour les données que vous avez fournies, mais comme il n'y a qu'une seule ligne de sortie pour continuer... c'est juste une supposition. Je suppose, sur la base de l'entrée et de la sortie que vous avez fournies, qu'en plus du paramètre et de l'emplacement, le processus et la partie sont également utilisés comme variables de regroupement (?), Et que Count sera toujours inférieur de 1 à n Rows dans un résumé des données . Ceux-ci sont assez faciles à changer dans le code ci-dessous si ce n'est pas le cas, mais encore une fois... juste une supposition.
Dans tous les cas, essayez ceci pour voir si c'est ce dont vous avez besoin et si ce n'est pas le cas, j'espère que vous êtes à un mod de code rapide de ce que vous voulez.
Acclamations,
brady
Names Default To Here( 1 );
dt = New Table( "Sample",
Add Rows( 6 ),
Set Header Height( 46 ),
New Column( "Date/Time",
Numeric,
"Continuous",
Format( "y/m/d h:m", 19 ),
Input Format( "y/m/d h:m" ),
Set Values( [3273127800, 3273124200, 3273142200, 3273138600, 3273152400, 3273149400] )
),
New Column( "Parameter", Character, "Nominal", Set Values( {"A.1", "A.2", "A.3", "A.3", "A.2", "A.3"} ) ),
New Column( "Location", Character, "Nominal", Set Values( {"B.1", "B.2", "B.3", "B.3", "B.1", "B.3"} ) ),
New Column( "Process", Character, "Nominal", Set Values( {"C.1", "C.2", "C.3", "C.3", "C.1", "C.3"} ) ),
New Column( "Tool", Character, "Nominal", Set Values( {"E.", "E", "F", "E", "E", "G"} ), Set Display Width( 43 ) ),
New Column( "Part", Character, "Nominal", Set Values( {"F-1.1", "F-1.2", "F-1.1", "F-1.1", "F-1.1", "F-1.1"} ) )
);
/////////////////BEGIN PROCESSING
//create a summary table
dtSum = dt << summary( group(:parameter, :location, :"Date/Time"n, :process, :tool, :part), Link to original data table( 0 ) );
//create a column for easy group navigation
dtSum << new column ("plpp", character, formula(:parameter || :location || :process || :part));
//process table, from bottom up
for each ( { r }, nrow(dtSum) :: 2,
if ( dtSum:plpp[r] == dtSum:plpp[r-1],
dtSum:tool[r-1] ||= evalinsert(", ^dtSum:tool[ r ]");
dtSum:n Rows[r - 1] += dtSum:n Rows[ r ];
dtSum << delete rows ( r );
);
);
// delete rows with no duplicates
dtSum << deleteRows (dtSum << get rows where (:n Rows == 1) )
<< Move Selected Columns( {:"Date/Time"n}, To First )
<< Move Selected Columns( {:Tool}, To Last );
// rename nRows to count, after subtracting 1
dtSum:Nrows[1::nrow(dtSum)]--;
dtSum:NRows << set name ("Count");
// split out tool column
dtSum << Text to Columns( columns( :Tool ), Delimiters( "," ) );
dtSum << delete columns ({"Tool", "plpp"});
Re : Comparaison de cellules avec une sortie conditionnelleSalut,
Oui, la dernière capture d'écran que j'ai envoyée correspond à la sortie de votre script comme ce que vous avez étiqueté le tableau "Final". Pardonnez-moi de ne pas partager la table spécifique en question avec les données car je dois mettre à jour les informations pour refléter les paramètres non IP. Je vais essayer de faire un meilleur travail d'explication. Comme je l'ai mentionné dans la question initiale, le tableau ci-dessous est un exemple de cas

et la sortie devrait ressembler au tableau ci-dessous

Je veux créer un résumé tableau du nombre de fois (répétition), ou décompte, qu'un « outil » atteint un « emplacement » dans la même journée de « date/heure » (pas nécessairement une heure spécifique). Donc, si une ligne se répète selon l'emplacement, le paramètre et le processus, cela devrait compter comme 1 répétition. Si cette deuxième rangée est sur le même outil ou sur un outil différent, cela n'a pas d'importance tant qu'elle répond aux 3 critères mentionnés pour 1 nombre de répétitions. Ensuite, là où l'exemple de table de sortie indique "Tool1, "Tool2" etc... ce serait un enregistrement des outils impliqués dans l'événement de répétition pour ces répétitions. Donc, s'il est allé à l'outil "E", alors le (emplacement, paramètre, processus) indique qu'un autre événement s'est produit le même jour et c'était sur l'outil "F", alors une colonne serait ajoutée à droite pour refléter que le premier événement s'est produit sur E et deuxième sur F et ainsi de suite. Finalement, je veux créer un ensemble de tracés dans jmp à partir de ce résumé où je pourrais afficher le nombre de ces événements répétés par outil, paramètre, emplacement, etc. En plus de savoir quels outils étaient impliqués dans ces événements répétés. J'espère que cela explique un peu plus ma pensée. Et merci pour votre temps sur ce que je l'apprécie.
Re : Comparaison de cellules avec une sortie conditionnelleBrady et ma version du code fonctionnent sur le tableau simple que vous avez fourni. Je suis d'accord avec lui que si son code ne fonctionne pas, veuillez fournir un tableau plus peuplé que nous pouvons tester.
Re : Comparaison de cellules avec une sortie conditionnelleSalut,
Tout d'abord, mes excuses pour le long retard, j'ai été tiré dans plusieurs directions. Ensuite, merci pour le script il est presque parfait et un tableau "Final" a été sorti. Ce que j'ai trouvé, c'est que la colonne de comptage fait ce qu'elle est censée faire, cependant, "l'outil" n'ancre pas les données. Ce qui signifie que pour chaque outil, je devrais avoir un "nombre" total de hits/counts, donc une colonne pour "count" et la colonne respective pour l'outil à côté devraient avoir le nombre de hits qui est également regroupé par les autres colonnes comme paramètre, emplacement etc... Ce que j'obtiens est illustré ci-dessous, où les outils sont divisés en différentes colonnes en plus d'être répartis en lignes associées à un décompte. Et la colonne "outil" nouvellement créée répète le même ID

Re : Comparaison de cellules avec une sortie conditionnelleL'exemple de sortie ci-dessus est-il un exemple de ce à quoi la sortie devrait ressembler, ou est-ce un exemple de la façon dont la sortie est actuellement incorrecte ?
Serait-il possible pour vous de joindre le tableau de données JMP que vous utilisez, afin qu'il existe un exemple de données réelles pouvant être utilisées pour les tests ?De plus, si ce qui précède n'est pas un exemple de ce à quoi les données devraient ressembler, pourriez-vous en fournir un exemple simple ?Je ne comprends pas ce que vous recherchez vraiment.
Re : Comparaison de cellules avec une sortie conditionnelleMerci cela a fonctionné !
Re : Comparaison de cellules avec une sortie conditionnelleMerci cela peut aussi fonctionner avec une petite manipulation de regroupement.