CIAO,
Ho il seguente problema:
a) Sto generando una tabella (chiamiamola tabella dt) con più colonne. Tuttavia, mi interessa esaminare solo il modello specifico (ad esempio: "ABC@XYZ") nei nomi delle colonne insieme ad altre due colonne (ad esempio: "LCOL", "WCOL"). Sto generando quella tabella. (Chiamo quella tabella dtB)
Prossimo
b) Utilizzo la tabella dtB, estraggo la sua colonna e utilizzo un ciclo for per generare una tabella di riepilogo per ciascuna di queste colonne che corrisponde al modello in Col Name.
c) Ho creato un elenco di tabelle vuoto, dt_sum_all
d) Ora il mio obiettivo è ottenere tutti i valori di riepilogo delle colonne che corrispondono al modello in un'unica tabella insieme alla colonna LCOL e WCOL. (Ricevo N tabelle per N di tali colonne, se non utilizzo la nuova tabella, ma non è quello che voglio: voglio 1 tabella )
e) Inoltre alla fine, una volta che ho una singola tabella, voglio rinominare Cols (di solito aggiunge SUM all'inizio di ogni colonna), come SUM ( ABC@XYZ_1AS ) in ABC@XYZ_1AS . Dato che ho molte colonne, voglio farlo in un ciclo o simile.
Quello che ho fino ad ora è il seguente:
dt = currentdatatable();
Wait(1);
colsd = dt << get column names( string );
pattern = "ABC@XYZ";
nd = N Items( colsd );
selCols = {"LCOL", "WCOL"};
For( i = 1, i <= nd, i++,
If( Contains( colsd[i], pattern ),
Insert Into( selCols, colsd[i] )
)
);
dtB = dt << Subset(
All rows,
Columns(selCols)
);
colNameList= dtB << get column names( string );
Wait(1);
dt_sum_all = {};
For( i = 1, i <= N Items( colNameList ), i++,
If( Contains( colNameList[i], pattern),
dt_sum = dtB << Summary(
Group( :LCOL, :WCOL ),
Sum(colNameList[i]),
Freq( "None" ),
Weight( "None" ),
) << show window(0);
);
Insert Into(dt_sum_all, dt_sum);
//Data Table (dt_sum_all) << Update (
///With(Data Table(dt_sum)),
//Match Columns(:LCOL = :LCOL, :WCOL=:WCOL)
);
////column(dt_sum, "SUM("||colNameList[i] || ")" ) << set name(colNameList[i]);
///);Il codice precedente non funziona e ricevo più tabelle per ciascuna colonna, anziché una unita/aggiornata. Quindi non prendere un tavolo. Qualcuno può aiutare, per favore. Grazie.
Se sto leggendo correttamente il tuo codice, quello che vuoi ottenere è una tabella di dati di dati di riepilogo per un insieme di colonne che corrispondono a un modello nella tabella di dati originale.
Credo che stavi lavorando molto più duramente del dovuto.Di seguito è riportato uno script di esempio, che utilizza la maggior parte del codice, ma lavora sulla tabella dei dati di esempio di Semiconductor Capability, in cui i nomi delle colonne lotto e wafer sono lot_id e wafer, anziché Lcol e Wcol.Ho eliminato la tabella dei dati dtB, perché a meno che non sia necessaria per qualcosa più avanti nello script, non è certamente necessario crearla solo per poi creare i dati di riepilogo per essa.I dati di riepilogo possono provenire direttamente dalla tabella dati originale.Inoltre, non è necessario riepilogare ciascuna colonna una alla volta.Tutte le colonne possono essere facilmente riassunte in una volta.Pertanto, non è necessario eseguire Update.Infine, c'è un'opzione nella piattaforma di riepilogo, che consentirà di assegnare ai nomi delle colonne lo stesso nome del nome della colonna di input, quindi non è necessario rinominare le colonne nella tabella di riepilogo.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/semiconductor capability.jmp" );
Wait( 0 );
colsd = dt << get column names( string );
pattern = "PNP";
nd = N Items( colsd );
selCols = {"lot_id", "wafer"};
For( i = 1, i <= nd, i++,
If( Contains( colsd[i], pattern ),
Insert Into( selCols, colsd[i] )
)
);
dt_sum = dt << Summary(
Group( :lot_id, :wafer ),
Sum( colNameList[Index( 3, N Items( colNameList ) )] ),
Freq( "None" ),
Weight( "None" ),
link to original data table( 0 ),
statistics column name format( "column" )
);