Passaggio dinamico di un set di colonne a una funzione di riepilogo della tabellaHo un flusso di lavoro che genera una tabella (esempio allegato), ma il numero di colonne e il nome di tali colonne, da 14 in su, variano a seconda del set di dati che l'utente finale sta visualizzando.
La prima parte dello script funziona senza problemi: genera un elenco dei nomi delle colonne. Ciò con cui ho difficoltà, e che va oltre qualsiasi cosa abbia fatto finora in JSL, è passare quell'elenco a una funzione di riepilogo della tabella. Per la massima trasparenza, ho provato a risolvere il problema con MS Copilot (AI Agent rimandava alla documentazione JMP), senza successo.
//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 );
Automazione e scriptingRe: Passaggio dinamico di un set di colonne a una funzione di riepilogo della tabellaCredo che questo ti dia ciò che desideri
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: Passaggio dinamico di un set di colonne a una funzione di riepilogo della tabellaFantastico Jim, grazie! Ho apportato una piccola modifica per passare i nomi delle colonne da 14 a fine anziché tutte le colonne che non erano utilizzate per il raggruppamento. Ecco la versione finale:
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" )
)
)
);