JSL:如何以共同的初始術語將所有欄位分組?我有一個 dt(70k cols),我想根據最初描述的術語將其分組為通用捆綁包。
例如,每個 10K 欄位均以「ChamberID」、「RecipeID」或「SlotNo」開頭。
我怎麼能編寫這個腳本來遍歷 dt 以找到所有常見的列,並將它們分組到一個可折疊的包中?

自動化和腳本編寫回覆:JSL:如何按共同的初始術語對所有列進行分組?這是一個小腳本,是在資料表中建立列組的範例。

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);回覆:JSL:如何按共同的初始術語對所有列進行分組?有很多方法可以做到這一點。 我使用了與下面腳本中演示的類似的東西(使用關聯數組)
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);
);
如果你需要更有活力,你也可以這樣做
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);
);
兩者的想法是相同的。 建立關聯數組,其中鍵是列組名稱,值是屬於該組的列的列表。