JSL : comment regrouper toutes les colonnes par terme initial commun ?J'ai un dt (70 000 couleurs) que j'aimerais regrouper en lots communs, en fonction des termes initiaux délimités.
Par exemple, 10 000 colonnes chacune commençant toutes par "ChamberID", "RecipeID" ou "SlotNo".
Comment puis-je créer un script pour parcourir le dt afin de trouver tous les cols communs et les regrouper dans un ensemble pliable ?

Automatisation et scriptsRe : JSL : comment regrouper toutes les colonnes par terme initial commun ?Voici un petit script qui est un exemple de création de groupes de colonnes dans une table de données.

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 : comment regrouper toutes les colonnes par terme initial commun ?Il existe de nombreuses façons de procéder. J'ai utilisé quelque chose de similaire comme je le démontre dans le script ci-dessous (en utilisant un tableau associatif)
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 vous avez besoin d'être plus dynamique, vous pouvez aussi le faire
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);
);
L'idée est la même dans les deux cas. Créez un tableau associatif où les clés sont des noms de groupes de colonnes et les valeurs sont une liste de colonnes qui appartiennent à ce groupe.