列セットをテーブルサマリー関数に動的に渡すテーブルを生成するワークフローがあります (サンプルを添付) が、列の数と 14 以降の列の名前は、エンド ユーザーが参照しているデータセットによって異なります。
スクリプトの最初の部分、つまり列名のリストを生成する部分は問題なく動作します。私が苦労しているのは、そのリストをテーブルサマリー関数に渡すことです。これはJSLでこれまで扱ったどの処理よりも難しい作業です。正直に言うと、MS Copilot(AIエージェントがJMPのドキュメントを参照するように指示しました)を使ってトラブルシューティングを試みましたが、うまくいきませんでした。
//num cols
dt = Data Table( "plate_data_wide_for_dynamic_summary Anonymized" );
nCols = N Col( dt );
//empty list of colnames, populate with col names from 14 to end of table
colnames = {};
For( i = 14, i <= nCols, i++,
Insert Into( colnames, Column( dt, i ) << Get Name )
);
//create summary expression with dynamic column placeholder
summaryExpr = Expr(
Data Table( "plate_data_wide_for_dynamic_summary Anonymized" ) << Summary(
Group(
:X__1, :X__3, :X__10
),
__DYNAMIC_COLUMNS__,
Freq( "None" ),
Weight( "None" ),
output table name( "Summarized by PC plate_well wide" )
)
);
//create list of summary statistics and columns to pass to summary function
dynamicCols = {};
For( i = 1, i <= N Items( colnames ), i++,
Insert Into( dynamicCols, Eval Expr( Median( As Column( dt, colnames[i] ) ) ) )
);
//pass dynamicCols list to summary expression and evaluate
Insert Into( summaryExpr[1][2], dynamicCols );
Eval( summaryExpr );
自動化とスクリプトRe: テーブル集計関数に列セットを動的に渡すこれがあなたの望むものを与えてくれると信じています
Names Default to Here( 1 );
dt = Data Table( "plate_data_wide_for_dynamic_summary Anonymized" );
nCols = N Col( dt );
//empty list of colnames, populate with col names from 14 to end of table
colnames = dt << get column names( string ); //num cols
staticNames = {"X__1", "X__3", "X__10"};
For Each( {sName}, staticNames, Try( Remove From( colnames, Contains( colnames, sName ), 1 ) ) );
//create summary expression with dynamic column placeholder
Eval(
Eval Expr(
Data Table( "plate_data_wide_for_dynamic_summary Anonymized" ) <<
Summary(
Group( Expr( staticNames ) ),
Median( Expr( colnames ) ),
Freq( "None" ),
Weight( "None" ),
output table name( "Summarized by PC plate_well wide" )
)
)
);

Re: テーブル集計関数に列セットを動的に渡す素晴らしいですね、ジムさん。ありがとうございます。グループ化に使用されていない列ではなく、14からendまでの列名を渡すように少し修正しました。最終版はこちらです。
Names Default to Here( 1 );
dt = Data Table( "plate_data_wide_for_dynamic_summary Anonymized" );
nCols = N Col( dt );
//empty list of colnames, populate with col names from 14 to end of table
colnames = {};
For( i = 14, i <= nCols, i++,
Insert Into( colnames, Column( dt, i ) << Get Name )
);
GroupColNames = {"X__1", "X__3", "X__10"};
//create summary expression with dynamic column insertion
Eval(
Eval Expr(
Data Table( "plate_data_wide_for_dynamic_summary Anonymized" ) <<
Summary(
Group( Expr( GroupColNames ) ),
Median( Expr( colnames ) ),
Freq( "None" ),
Weight( "None" ),
output table name( "Summarized by PC plate_well wide" )
)
)
);