Script para recorrer y agrupar columnas por nombre, dinámicamenteAsí que estoy tratando de resolver esto y simplemente no funciona del todo.
Tengo una tabla con un par clave-valor que he DIVIDIDO de alto a ancho. Termino con alrededor de 10k columnas que tienen una estructura de nombres regular, como
"15.02.0 param1", "15.02 param2", "15.02 param3"...."15.03 param1", "15.03 param2", "15.03 param3",...
¿Cómo puedo mirar a través de todas estas columnas y agruparlas dinámicamente por el término inicial? es decir. todas las columnas del 15,02 % en un grupo, todas las columnas del 15,03 %, todas las del 15,04 %,... todas las del 17,06 %... y nombrar el grupo según el número de grupo?
Mi script simplemente agrupa todo en un solo grupo. 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();
);secuencias de comandosRe: Script para recorrer y agrupar columnas por nombre, dinámicamenteHay muchas maneras de hacer esto.
Aquí hay un ejemplo que primero construye los grupos en una matriz asociativa con la clave como nombre del grupo y el valor es una lista de columnas en el grupo, luego recorre esa matriz asociativa para agrupar columnas en la tabla de datos. Para obtener los nombres de los grupos, usamos la función Word() en los nombres de las columnas. Esto requiere JMP16 debido al uso de 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 para recorrer y agrupar columnas por nombre, dinámicamentegracias, intentare esto en breve.
Pero, ¿qué pasa con la construcción dinámica de la lista de matrices de agrupación? Básicamente, cada valor único de :RecipeStepId debe ser un nombre de grupo. Intenté hacer eso al principio, antes de dividir la tabla, guardándola en "RecipeStepIndex"
Summarize( dt, RecipeStepIndex = by( :RecipeStepId) );//get list of unique RecipeStepID's