你好,
我有以下问题:
a) 我正在生成一个包含多列的表(称为表 dt)。但是我感兴趣的只是查看列名称中的特定模式(例如 - “ABC@XYZ”)以及另外两列(例如 - “LCOL”、“WCOL”)。我正在生成该表。(将该表称为 dtB)
下一个
b) 我使用表 dtB,提取其列并使用 for 循环为与 Col Name 中的模式匹配的每个列生成一个摘要表。
c)我创建了一个空表列表,dt_sum_all
d)现在我的目标是获取与模式匹配的所有列的汇总值以及 LCOL 和 WCOL 列,并将其放入一个表中。(如果我不使用新表,我将获得 N 个这样的列的 N 个表,但这不是我想要的 -我想要 1 个表)
e) 最后,一旦我有了一个表,我想重命名 Cols (通常在每列的开头附加 SUM),例如 SUM ( ABC@XYZ_1AS ) 到ABC@XYZ_1AS 。由于我有很多列,我想在循环或类似方法中执行此操作。
到目前为止我所拥有的是以下内容:
dt = currentdatatable();
Wait(1);
colsd = dt << get column names( string );
pattern = "ABC@XYZ";
nd = N Items( colsd );
selCols = {"LCOL", "WCOL"};
For( i = 1, i <= nd, i++,
If( Contains( colsd[i], pattern ),
Insert Into( selCols, colsd[i] )
)
);
dtB = dt << Subset(
All rows,
Columns(selCols)
);
colNameList= dtB << get column names( string );
Wait(1);
dt_sum_all = {};
For( i = 1, i <= N Items( colNameList ), i++,
If( Contains( colNameList[i], pattern),
dt_sum = dtB << Summary(
Group( :LCOL, :WCOL ),
Sum(colNameList[i]),
Freq( "None" ),
Weight( "None" ),
) << show window(0);
);
Insert Into(dt_sum_all, dt_sum);
//Data Table (dt_sum_all) << Update (
///With(Data Table(dt_sum)),
//Match Columns(:LCOL = :LCOL, :WCOL=:WCOL)
);
////column(dt_sum, "SUM("||colNameList[i] || ")" ) << set name(colNameList[i]);
///);上述代码不起作用,我为每一列获取了多个表,而不是一个合并/更新的表。所以没有获取一个表。有人可以帮忙吗?谢谢。
如果我正确阅读了您的代码,那么您最终想要的是一个汇总数据的数据表,其中包含与原始数据表中的模式匹配的一组列。
我相信你工作得比你必须要努力得多。下面是一个示例脚本,使用了您的大部分代码,但使用的是半导体能力示例数据表,其中批次和晶圆列的名称是 lot_id 和晶圆,而不是您的 Lcol 和 Wcol。我已经删除了 dtB 数据表,因为除非您在脚本的后面需要它,否则肯定不需要创建它来为它创建摘要数据。汇总数据可以直接来自原始数据表。此外,无需一次汇总每一列。所有列都可以轻松地一次汇总。因此,不需要运行更新。最后,汇总平台中有一个选项,允许列名与输入列名相同,因此无需重命名汇总表中的列。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/semiconductor capability.jmp" );
Wait( 0 );
colsd = dt << get column names( string );
pattern = "PNP";
nd = N Items( colsd );
selCols = {"lot_id", "wafer"};
For( i = 1, i <= nd, i++,
If( Contains( colsd[i], pattern ),
Insert Into( selCols, colsd[i] )
)
);
dt_sum = dt << Summary(
Group( :lot_id, :wafer ),
Sum( colNameList[Index( 3, N Items( colNameList ) )] ),
Freq( "None" ),
Weight( "None" ),
link to original data table( 0 ),
statistics column name format( "column" )
);