열 집합을 테이블 요약 함수에 동적으로 전달테이블을 생성하는 워크플로가 있는데(샘플 첨부), 14개 이상의 열 개수와 열 이름은 최종 사용자가 보고 있는 데이터 세트에 따라 달라집니다.
스크립트의 첫 번째 부분은 문제없이 작동합니다. 열 이름 목록을 생성하는 부분입니다. 제가 어려움을 겪고 있는 부분은 지금까지 JSL에서 해본 어떤 작업보다 더 어려운 부분인데, 바로 이 목록을 테이블 요약 함수로 다시 전달하는 것입니다. 완전히 투명하게, MS Copilot(AI Agent가 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: 테이블 요약 함수에 열 집합을 동적으로 전달하기Jim, 정말 멋져요. 감사합니다. 그룹화에 사용되지 않은 열 대신 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" )
)
)
);