Ho una tabella dati che descrive la cronologia degli utensili per una serie di lotti di semiconduttori. In alcuni casi, i lotti possono essere suddivisi ed eseguiti su utensili diversi per la stessa fase di elaborazione. In tal caso, vorrei creare una colonna con ogni utensile concatenato per indicare che è stato coinvolto > 1 utensile. Con molto aiuto, sono arrivato al punto in cui posso identificare i lotti, le fasi e le sottofasi in cui è stato utilizzato > 1 utensile. Posso trasporre i dati per arrivare agli utensili nominati nelle colonne, ma è ancora poco pratico. Posso in qualche modo concatenare ciò per ottenere l'elenco degli utensili univoci. Ho anche esaminato Split, ma non tutte le opzioni sono riflesse.

Ecco una formula che funzionerà per creare la colonna Risultato desiderato
As Constant( dt = Current Data Table() );
Concat Items( Associative Array( dt[Row(), 0] ) << get keys, "/" );
txnelson
Questo è un enorme passo avanti. Esiste un modo semplice per eludere le prime 4 colonne dall'equazione? Le colonne dalla 5 in poi contengono i dati rilevanti.
Ecco un modo per farlo
As Constant(
dt = Current Data Table();
start = 5;
stop = N Cols( dt );
);
Concat Items( Associative Array( dt[Row(), Index( start, stop )] ) << get keys, "/" );
Come forte suggerimento, prenditi il tempo di andare a
Aiuto=>Guida in linea JMP
e leggi la sezione sulla Guida allo scripting per familiarizzare con JSL e lo scripting
Come me, è brutto ma funziona. La colonna generata dallo script di txnelson può avere istanze indesiderate della barra che precede il testo. Elimino la formula nella colonna e la sostituisco con una colonna diversa usando regex per eliminare qualsiasi / precedente.
New Column("Tools2", Character, "Nominal", Formula(As Constant(
dt = Current Data Table();
start = 6;
stop = N Cols( dt );
);
Concat Items( Associative Array( dt[Row(), Index( start, stop )] ) << get keys, "/" );));
Wait(1);
Data Table( "Transpose of Tool_History" ):Tools2 << Delete Formula;
colList = Data Table( "Transpose of Tool_History" ) << Get Column Names( String );
For( i = 1, i <= N Cols( Data Table( "Transpose of Tool_History" ) ), i++,
If( Contains( colList[i], "Row" ), /* select only columns with Row
in the name */
Column( colList[i] ) << Set Selected( 1 );
)
);
Data Table( "Transpose of Tool_History" ) << Delete Columns();
New Column("Tools", Character, "Nominal", Formula(Regex(:Tools2, "\w.*")));
Wait(1);
Data Table( "Transpose of Tool_History" ):Tools << Delete Formula;Ci sarà molto lavoro da fare per ottenere il risultato. Ecco una semplice modifica all'ultima formula che ho creato che rimuove la "/" precedente
New Column( "Result",
Character,
"Nominal",
set each value(
As Constant(
dt = Current Data Table();
start = 5;
stop = N Cols( dt );
);
Substr(
Char( Concat Items( Associative Array( dt[Row(), Index( start, stop )] ) << get keys, "/" ) ),
2
);
)
);
Ecco un esempio completo con una tabella dati di esempio
Names Default To Here( 1 );
// Create a sample data table
New Table( "Sample",
Add Rows( 3 ),
Set Header Height( 46 ),
New Column( "lot",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [1324567, 1324567, 1324567] )
),
New Column( "step", Character, "Nominal", Set Values( {"Material", "Material", "Material"} ) ),
New Column( "substep", Character, "Nominal", Set Values( {"Deposit", "CD Measure", "Measure"} ) ),
New Column( "Label", Character, "Nominal", Set Values( {"machine", "machine", "machine"} ) ),
New Column( "Row 1", Character, "Nominal", Set Values( {"Machine A", "Caliper 1", "Tapemeasure 1"} ) ),
New Column( "Row 2", Character, "Nominal", Set Values( {"", "Caliper 2", ""} ) ),
New Column( "Row 2 2", Character, "Nominal", Set Values( {"Machine A", "", ""} ) ),
New Column( "Row 4", Character, "Nominal", Set Values( {"", "", "Tapemeasure 3"} ) ),
New Column( "Row 5", Character, "Nominal", Set Values( {"Machine B", "", ""} ) ),
New Column( "Row 6", Character, "Nominal", Set Values( {"", "", ""} ) ),
New Column( "Row 7", Character, "Nominal", Set Values( {"", "", ""} ) )
);
// Add the concatenated column, with the "/" removed from begining
New Column( "Result",
Character,
"Nominal",
set each value(
As Constant(
dt = Current Data Table();
start = 5;
stop = N Cols( dt );
);
Substr(
Char( Concat Items( Associative Array( dt[Row(), Index( start, stop )] ) << get keys, "/" ) ),
2
);
)
);
Sapevo che era brutto! Molto meglio davvero.
Apprezzato come sempre.