JSL: ¿cómo agrupar todas las columnas por término inicial común?Tengo un dt (70.000 columnas) que me gustaría agrupar en paquetes comunes, según los términos delineados iniciales.
Por ejemplo, 10.000 columnas cada una que comienzan con "ChamberID", "RecipeID" o "SlotNo".
¿Cómo puedo programar esto para revisar el dt y encontrar todas las columnas comunes y agruparlas en un paquete plegable?

Automatización y secuencias de comandosRe: JSL: ¿cómo agrupar todas las columnas por término inicial común?Aquí hay un pequeño script que es un ejemplo de cómo crear grupos de columnas en una tabla de datos.

Names Default To Here( 1 );
dt =
// Open Data Table: semiconductor capability.jmp
// → Data Table( "semiconductor capability" )
Open( "$SAMPLE_DATA/semiconductor capability.jmp" );
colNames = dt << get column names( string, continuous );
group1 = {};
group2 = {};
For Each( {name}, colNames,
/*If(
Left( name, 9 ) == "ChamberID",
Insert Into( group1, name ),
Left( name, 8 ) == "RecipeID",
Insert Into( group2, name )
)*/
If(
Left( name, 3 ) == "NPN",
Insert Into( group1, name ),
Left( name, 3 ) == "PNP",
Insert Into( group2, name )
)
);
dt << group columns( "NPN", group1);
dt << group columns( "PNP", group2);Re: JSL: ¿cómo agrupar todas las columnas por término inicial común?Hay muchas maneras de hacer esto. He usado algo similar como lo demuestro en el siguiente script (usando una matriz asociativa)
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Probe.jmp");
aa_groups = ["DELL" => {}, "DELW" => {}, "RCON" => {}];
col_names = dt << Get Column Names("String");
For Each({col_name}, col_names,
For Each({{key, value}}, aa_groups,
If(Starts With(col_name, key ||"_"), // "_" is used as additional separator
Insert Into(aa_groups[key], col_name);
Break();
)
);
);
For Each({{groupname, groupcols}}, aa_groups,
dt << Group Columns(groupname, groupcols);
);
Si necesitas ser más dinámico, también puedes hacerlo.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Probe.jmp");
aa_groups = Associative Array();
col_names = dt << Get Column Names("String");
For Each({col_name}, col_names,
nameparts = Words(col_name, "_"); // depending ion your columns, this might need to change
If(N Items(nameparts) > 1,
If(!Contains(aa_groups, nameparts[1]),
aa_groups[nameparts[1]] = {}; // add new key
);
Insert Into(aa_groups[nameparts[1]], col_name);
);
);
For Each({{groupname, groupcols}}, aa_groups,
dt << Group Columns(groupname, groupcols);
);
La idea es la misma en ambos. Cree una matriz asociativa donde las claves sean nombres de grupos de columnas y los valores sean una lista de columnas que pertenecen a ese grupo.