こんにちは、
次のような問題があります:
a) 複数の列を持つテーブル (テーブル dt と呼びます) を生成しています。ただし、列名の特定のパターン (たとえば、「ABC@XYZ」) と他の 2 つの列 (たとえば、「LCOL」、「WCOL」) のみを確認したいと考えています。そのテーブルを生成しています。(そのテーブルを dtB と呼びます)
次
b) テーブル dtB を使用し、その列をプルして for ループを使用して、Col Name のパターンに一致する各列の概要テーブルを生成します。
c) 空のテーブルリストdt_sum_allを作成しました
d) ここでの目標は、パターンに一致する列のすべての集計値を、LCOL 列と WCOL 列とともに 1 つのテーブルに取得することです。(新しいテーブルを使用しない場合、N 個の列に対して N 個のテーブルが取得されますが、これは私が望んでいることではありません。必要なのは 1 つのテーブルです)
e) また、最後にテーブルが 1 つできたら、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]);
///);上記のコードは機能せず、1 つの結合/更新されたテーブルではなく、各列に対して複数のテーブルが取得されます。つまり、1 つのテーブルが取得されないのです。どなたか助けてください。ありがとうございます。
あなたのコードを正しく読んでいれば、元のデータ テーブルのパターンに一致する一連の列の集計データのデータ テーブルが得られます。
必要以上に頑張っていたと思います。以下は、ほとんどのコードを使用するスクリプトの例ですが、Semiconductor Capability サンプル データ テーブルに取り組んでいます。ここで、ロットとウェーハの列の名前は、Lcol と Wcol ではなく、lot_id とウェーハです。dtB データ テーブルは削除しました。これは、スクリプトの後半で必要になる場合を除き、要約データを作成するためだけに作成する必要がないためです。集計データは、元のデータ テーブルから直接取得できます。また、各列を 1 つずつ要約する必要もありません。すべての列を一度に簡単に要約できます。したがって、Update を実行する必要はありません。最後に、集計プラットフォームには、列名に入力列名と同じ名前を付けることができるオプションがあるため、集計テーブルの列の名前を変更する必要はありません。
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" )
);