Confronto di celle con output condizionatoCiao,
Sto cercando di creare un file contare di occorrenze in base alle condizioni, utilizzando la tabella seguente come esempio. Le condizioni per un conteggio pari a 1 sono che le colonne "Parametro" E "Posizione" si ripetono entrambe insieme nella riga successiva O in qualsiasi altro punto delle 2 colonne. La tabella di output avrebbe gli stessi dati di colonna presenti nella tabella originale con 3 colonne aggiunte di "Conteggio", "Strumento 1", "Strumento 2" (il numero di strumenti può aumentare fino a 5).

L'output per questa tabella sarebbe il seguente. Poiché le righe 3 e 4 si ripetono per la condizione della colonna 2 (parametro e posizione) che sarebbe un conteggio di 1, si ripete di nuovo con le stesse condizioni che sarebbero il secondo conteggio per un totale di 2. La riga da visualizzare dipenderà dalla prima delle 3 righe in ordine di data. Infine, anche la colonna Strumento verrà popolata in ordine di data (ad es. lo strumento 1 (o E) è arrivato per primo alle 13:10, quindi lo strumento 2 (o F) è arrivato alle 14:10) ecc.

Tabella datiRe: Confronto di celle con output condizionaleEcco uno script che dovrebbe darti un buon inizio nella conversione dei dati
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 documentazione sulle varie piattaforme e funzioni è documentata nello Scripting Index e nella Scripting Guide.Entrambi sono disponibili nel menu a discesa Aiuto.
Re: Confronto di celle con output condizionaleCiao,
*Penso* di vedere cosa stai cercando, ma come dice Jim, più contesto è meglio. Quanto segue produce l'output che descrivi, per i dati che hai fornito, ma poiché c'è solo 1 riga di output su cui andare avanti ... è solo un'ipotesi. Presumo, in base all'input e all'output che hai fornito, che oltre a parametro e posizione, processo e parte ANCHE siano usati come variabili di raggruppamento (?) e che Count sarà sempre 1 in meno di n Righe in un riepilogo dei dati . Questi sono abbastanza facili da cambiare nel codice qui sotto se non è il caso, ma ancora una volta ... solo un'ipotesi.
In ogni caso, prova questo per vedere se è ciò di cui hai bisogno e, in caso contrario, si spera che tu sia un rapido mod di codice lontano da ciò che desideri.
Saluti,
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: Confronto di celle con output condizionaleCIAO,
Sì, l'ultima cattura dello schermo che ho inviato è l'output del tuo script come quello che hai etichettato come tabella "Finale". Perdonami per non aver condiviso la tabella specifica in questione con i dati poiché devo aggiornare le informazioni per riflettere i parametri non IP. Cercherò di fare un lavoro migliore di spiegare. Come ho accennato nella domanda iniziale, la tabella seguente è un caso esemplificativo

e l'output dovrebbe essere simile alla tabella sottostante

Voglio creare un riepilogo tabella del numero di volte (ripetizioni), o conteggio, uno "strumento" colpisce una "posizione" entro lo stesso giorno di "data/ora" (non necessariamente un'ora specifica). Quindi, se una riga si ripete per posizione, parametro e processo, dovrebbe contarla come 1 ripetizione. Se quella seconda riga si trova sullo stesso strumento o su uno diverso, non importa, purché soddisfi i 3 criteri menzionati per 1 conteggio delle ripetizioni. Quindi, dove l'esempio della tabella di output dice "Strumento1, "Strumento2" ecc... sarebbe un record di quali strumenti sono stati coinvolti nell'evento di ripetizione per quelle ripetizioni. Quindi, se è andato allo strumento "E", allora (posizione, parametro, processo) indica che un altro evento si è verificato lo stesso giorno ed era sullo strumento "F", quindi verrà aggiunta una colonna a destra per riflettere che si è verificato il primo evento su E e la seconda su F e così via. Alla fine voglio creare una serie di grafici in jmp da quel riepilogo in cui sarei in grado di visualizzare il conteggio di quegli eventi ripetuti per strumento, parametro, posizione ecc ... Oltre ad avere quali strumenti sono stati coinvolti in quegli eventi ripetuti. Spero che questo spieghi un po 'di più sui miei pensieri. E grazie per il tuo tempo su questo, lo apprezzo.
Re: Confronto di celle con output condizionaleSia la versione di Brady che la mia versione del codice funzionano sulla semplice tabella che hai fornito. Sono d'accordo con lui sul fatto che se il suo codice non funziona, fornisci una tabella più popolata su cui possiamo testare.
Re: Confronto di celle con output condizionaleCIAO,
Innanzitutto, mi scuso per il lungo ritardo, sono stato trascinato in più direzioni. Successivamente, grazie per la sceneggiatura, è quasi perfetta ed è stata prodotta una tabella "Finale". Quello che ho scoperto è che la colonna di conteggio fa quello che dovrebbe fare, tuttavia, lo "Strumento" non ancora i dati. Significa che per ogni strumento dovrei avere un "conteggio" totale di colpi/conteggi, quindi una colonna per "conteggio" e la rispettiva colonna per lo strumento accanto dovrebbe avere il numero di colpi che è anche raggruppato dalle altre colonne come parametro, posizione ecc... Quello che ottengo è illustrato di seguito, dove gli strumenti vengono suddivisi in diverse colonne oltre a essere distribuiti in righe associate a un conteggio. E la colonna "strumento" appena creata ripete lo stesso ID

Re: Confronto di celle con output condizionaleL'esempio di output sopra è un esempio di come dovrebbe essere l'output o è un esempio di come l'output è attualmente errato?
Sarebbe possibile per te allegare la tabella di dati JMP che stai utilizzando, quindi c'è un esempio di alcuni dati reali che possono essere utilizzati per i test?Inoltre, se quanto sopra non è un esempio di come dovrebbero essere i dati, potresti fornirne un semplice esempio?Sono confuso su quello che stai veramente cercando.
Re: Confronto di celle con output condizionaleGrazie questo ha funzionato!
Re: Confronto di celle con output condizionaleGrazie, questo può funzionare anche con una piccola manipolazione del raggruppamento.