Zellvergleich mit bedingter AusgabeHi,
Ich versuche, eine zu erstellen zählen von Ereignissen basierend auf Bedingungen, wobei die folgende Tabelle als Beispiel verwendet wird. Die Bedingungen für eine Zählung von 1 sind, dass die Spalten „Parameter“ UND „Ort“ beide gemeinsam in der nächsten Zeile ODER an einer anderen Stelle in den 2 Spalten wiederholt werden. Die Ausgabetabelle hätte die gleichen Spaltendaten wie die ursprüngliche Tabelle mit 3 hinzugefügten Spalten von "Anzahl", "Werkzeug 1", "Werkzeug 2" (die Anzahl der Werkzeuge kann auf 5 erhöht werden).

Die Ausgabe für diese Tabelle würde wie folgt aussehen. Da sich Zeile 3 und 4 gemäß der 2-Spalten-Bedingung (Parameter und Position) wiederholen, was eine Zählung von 1 wäre, wird sie erneut mit denselben Bedingungen wiederholt, die die 2. Zählung für insgesamt 2 wäre. Die anzuzeigende Zeile würde von der ersten von 3 Zeilen in der Reihenfolge des Datums abhängen. Schließlich würde die Tool-Spalte auch nach Datum sortiert werden (dh Tool 1 (oder E) kam zuerst um 13:10 Uhr herein, dann kam Tool 2 (oder F) um 14:10 Uhr herein) usw.

DatentabelleBetreff: Zellvergleich mit bedingter AusgabeHier ist ein Skript, das Ihnen einen guten Start in Ihre Datenkonvertierung geben sollte
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 );
Die Dokumentation zu den verschiedenen Plattformen und Funktionen ist im Scripting Index und im Scripting Guide dokumentiert.Beide sind im Pulldown-Menü Hilfe verfügbar.
Betreff: Zellvergleich mit bedingter AusgabeHallo,
Ich *glaube*, ich sehe, wonach Sie suchen, aber wie Jim erwähnt, ist mehr Kontext besser. Das Folgende erzeugt die von Ihnen beschriebene Ausgabe für die von Ihnen bereitgestellten Daten, aber da nur eine Ausgabezeile vorhanden ist, ist dies nur eine Vermutung. Ich nehme an, basierend auf der von Ihnen bereitgestellten Ein- und Ausgabe, dass neben Parameter und Position AUCH Prozess und Teil als Gruppierungsvariablen (?) verwendet werden und dass Count in einer Zusammenfassung der Daten immer 1 weniger als n Zeilen ist . Diese können leicht im folgenden Code geändert werden, wenn dies nicht der Fall ist, aber auch hier ... nur eine Vermutung.
Probieren Sie es auf jeden Fall aus, um zu sehen, ob es das ist, was Sie brauchen, und wenn nicht, sind Sie hoffentlich nur einen kurzen Code-Mod von dem entfernt, was Sie wollen.
Beifall,
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"});
Betreff: Zellvergleich mit bedingter AusgabeHallo,
Ja, die letzte Bildschirmaufnahme, die ich gesendet habe, zeigt die Ausgabe Ihres Skripts als das, was Sie als "Endtabelle" bezeichnet haben. Verzeihen Sie mir, dass ich die betreffende spezifische Tabelle nicht mit den Daten geteilt habe, da ich die Informationen aktualisieren muss, um Nicht-IP-Parameter widerzuspiegeln. Ich werde versuchen, es besser zu erklären. Wie ich in der Eingangsfrage erwähnt habe, ist die folgende Tabelle ein Beispielfall

und die Ausgabe sollte wie in der folgenden Tabelle aussehen

Ich möchte eine erstellen Zusammenfassung Tabelle mit der Anzahl (Wiederholungen) oder Anzahl, mit der ein "Werkzeug" am selben Tag wie "Datum/Uhrzeit" (nicht unbedingt eine bestimmte Zeit) auf einen "Ort" trifft. Wenn sich also eine Zeile pro Position, Parameter und Prozess wiederholt, sollte dies als 1 Wiederholung gezählt werden. Wenn sich diese zweite Reihe auf demselben oder einem anderen Werkzeug befindet, spielt es keine Rolle, solange sie das 3-Kriterium erfüllt, das für 1 Wiederholungszahl erwähnt wird. Wenn dann im Beispiel der Ausgabetabelle "Tool1, "Tool2" usw. steht, wäre das eine Aufzeichnung darüber, welche Werkzeuge an dem Wiederholungsereignis für diese Wiederholungen beteiligt waren. Wenn es also zu Tool „E“ ging, dann zeigt (Ort, Parameter, Prozess) an, dass ein anderes Ereignis am selben Tag stattgefunden hat und es war auf Tool „F“, dann würde rechts eine Spalte hinzugefügt, die widerspiegelt, dass das erste Ereignis stattgefunden hat auf E und zweitens auf F und so weiter. Schließlich möchte ich aus dieser Zusammenfassung eine Reihe von Diagrammen in jmp erstellen, in denen ich die Anzahl dieser Wiederholungsereignisse nach Werkzeug, Parameter, Ort usw. anzeigen kann. Zusätzlich dazu, welche Werkzeuge an diesen Wiederholungsereignissen beteiligt waren. Ich hoffe, das erklärt ein wenig mehr über meine Gedanken. Und danke für deine Zeit dafür, ich schätze es.
Betreff: Zellvergleich mit bedingter AusgabeSowohl Bradys als auch meine Version des Codes funktionieren auf der einfachen Tabelle, die Sie bereitgestellt haben. Ich stimme ihm zu, dass, wenn sein Code nicht funktioniert, bitte eine besser gefüllte Tabelle bereitstellen, mit der wir testen können.
Betreff: Zellvergleich mit bedingter AusgabeHallo,
Zuerst entschuldige ich mich für die lange Verzögerung, ich wurde in mehrere Richtungen gezogen. Als nächstes danke für das Skript, es ist fast perfekt und eine "Final" -Tabelle wurde ausgegeben. Was ich gefunden habe, war, dass die Zählspalte das tut, was sie tun soll, aber das "Tool" verankert die Daten nicht. Das heißt, für jedes Werkzeug sollte ich eine Gesamtzahl von Treffern / Zählungen haben, also sollte eine Spalte für "Anzahl" und die jeweilige Spalte für Werkzeug daneben die Anzahl der Treffer haben, die auch von den anderen Spalten wie Parameter gruppiert wird. Standort usw... Was ich bekomme, ist unten abgebildet, wo die Werkzeuge in verschiedene Spalten aufgeteilt werden, zusätzlich zu der Verteilung in Zeilen, die mit einer Zählung verbunden sind. Und die neu erstellte Spalte "Tool" wiederholt dieselbe ID

Betreff: Zellvergleich mit bedingter AusgabeIst das obige Ausgabebeispiel ein Beispiel dafür, wie die Ausgabe aussehen sollte, oder ist es ein Beispiel dafür, wie die Ausgabe derzeit falsch ist?
Wäre es Ihnen möglich, die von Ihnen verwendete JMP-Datentabelle anzuhängen, damit es ein Beispiel für einige echte Daten gibt, die zum Testen verwendet werden können?Wenn das Obige kein Beispiel dafür ist, wie die Daten aussehen sollten, könnten Sie ein einfaches Beispiel dafür geben?Ich bin verwirrt darüber, was Sie wirklich suchen.
Betreff: Zellvergleich mit bedingter AusgabeDanke das hat funktioniert!
Betreff: Zellvergleich mit bedingter AusgabeDanke, das kann auch mit einer kleinen Gruppierungsmanipulation funktionieren.