Script per scorrere e raggruppare le colonne per nome, in modo dinamicoQuindi sto cercando di capirlo e non funziona del tutto.
Ho una tabella con una coppia chiave-valore che ho SPLIT da Tall a Wide. Finisco con circa 10.000 colonne che hanno tutte una struttura di denominazione regolare, come
"15.02.0 param1", "15.02 param2", "15.02 param3"...."15.03 param1", "15.03 param2", "15.03 param3",...
Come posso esaminare tutte queste colonne e raggrupparle dinamicamente in base al termine iniziale? cioè. tutte le colonne 15,02% in un gruppo, tutte le colonne 15,03%, tutte 15,04%, ... tutte 17,06%....e nominare il gruppo in base al numero groupby?
Il mio script raggruppa semplicemente tutto in un unico gruppo. ug.
//**split Aggregate Data from TALL to WIDE, grouping WIDE columns by StepID
dt = current data table();
Summarize( dt, RecipeStepIndex = by( :RecipeStepId) );//get list of unique RecipeStepID's
//split the table TALL to WIDE
dt << Split(
Split By( :RecipeStepId, :ParameterName, :AggregateFunction ),
Split( :Value ),
Group( :Recipe, :ProcessTime, :Tool, :Chamber, :Lot, :WaferScribe ),
Output Table( "AggWide" ),
Remaining Columns( Drop All ),
Sort by Column Property,
dt << sort( by( :Recipe, :EquipmentId, :ChamberId, :LotId, :SlotNo ))
);
dtAggWide = current data table();
ColNamesList = dtAggWide << get column names(string, continuous); //get the column names of the WIDE table
//Create an empty list for the matching columns
RecipeStepList = {};
// Find matching column names
For( i = 1, i <= N items( RecipeStepIndex ), i++,
For( j = 1, j <= N Items( ColNamesList ), j++,
If(
Contains( ColNamesList[j], RecipeStepIndex[i] ),
Insert Into( RecipeStepList, ColNamesList[j] ),
);
);
);
// If groups of columns are found, create Col groupings
If( N Items( RecipeStepList ) > 0,
dtAggWide << select columns( RecipeStepList );
dtAggWide << group columns();
);SceneggiaturaRe: Script per scorrere e raggruppare le colonne per nome, in modo dinamicoCi sono molti modi per farlo.
Ecco un esempio che prima crea i gruppi in un array associativo con la chiave come nome del gruppo e il valore è l'elenco delle colonne nel gruppo, quindi esegue un ciclo su quell'array associativo per raggruppare le colonne nella tabella dei dati. Per ottenere i nomi dei gruppi utilizziamo la funzione Word() sui nomi delle colonne. Ciò richiede JMP16 a causa dell'utilizzo di For Each
Names Default To Here(1);
// this solution requires JMP16
dtAggWide = New Table("Untitled",
Add Rows(0),
New Column("15.02.0 param1", Numeric, "Continuous", Format("Best", 12), Set Values([])),
New Column("15.02.0 param2", Numeric, "Continuous", Format("Best", 12), Set Values([])),
New Column("15.02.0 param3", Numeric, "Continuous", Format("Best", 12), Set Values([])),
New Column("15.03 param1", Numeric, "Continuous", Format("Best", 12), Set Values([])),
New Column("15.03 param2", Numeric, "Continuous", Format("Best", 12), Set Values([]))
);
col_list = dtAggWide << Get Column Names("String");
// first get the column group names and columns<BR />// in this solution case we use associative array
aa_groups = Associative Array();
For Each({col_name}, col_list,
col_group = Word(1, col_name, " ");
If(!Contains(aa_groups, col_group),
aa_groups[col_group] = {};
);
Insert Into(aa_groups[col_group], col_name)
);
Show(aa_groups);
For Each({{key, value}}, aa_groups,
dtAggWide << Group Columns(key, value);
);

Re: Script per scorrere e raggruppare le colonne per nome, in modo dinamicograzie, lo proverò a breve.
Ma che dire della creazione dinamica dell'elenco di array di raggruppamento? Fondamentalmente, ogni valore univoco di :RecipeStepId dovrebbe essere un nome groupby. Ho provato a farlo all'inizio, prima di dividere la tabella, salvandola in "RecipeStepIndex"
Summarize( dt, RecipeStepIndex = by( :RecipeStepId) );//get list of unique RecipeStepID's
Re: Script per scorrere e raggruppare le colonne per nome, in modo dinamicoÈ possibile "precompilare" l'array associativo, ad esempio, con i nomi delle colonne basati su RecipeStepIndex. Molto probabilmente RecipeStepIndex verrà trovato dall'inizio dei nomi delle colonne divise, quindi dovrebbe ancora funzionare.
Names Default To Here(1);
// this solution requires JMP16
dtAggWide = New Table("Untitled",
Add Rows(0),
New Column("15.02.0 param1", Numeric, "Continuous", Format("Best", 12), Set Values([])),
New Column("15.02.0 param2", Numeric, "Continuous", Format("Best", 12), Set Values([])),
New Column("15.02.0 param3", Numeric, "Continuous", Format("Best", 12), Set Values([])),
New Column("15.03 param1", Numeric, "Continuous", Format("Best", 12), Set Values([])),
New Column("15.03 param2", Numeric, "Continuous", Format("Best", 12), Set Values([]))
);
col_list = dtAggWide << Get Column Names("String");
// first get the column group names and columns// in this solution case we use associative array
aa_groups = Associative Array();
//Summarize(dt, RecipeStepIndex = by(:RecipeStepId));//get list of unique RecipeStepID's
RecipeStepIndex = {"15.02.0", "15.03"};
aa_groups = Associative Array(RecipeStepIndex, Repeat({{}}, N Items(RecipeStepIndex)));
For Each({col_name}, col_list,
col_group = Word(1, col_name, " ");
Insert Into(aa_groups[col_group], col_name)
);
For Each({{key, value}}, aa_groups,
dtAggWide << Group Columns(key, value);
);