Dynamisches Übergeben einer Reihe von Spalten an eine TabellenzusammenfassungsfunktionIch habe einen Workflow, der eine Tabelle generiert (Beispiel beigefügt), aber die Anzahl der Spalten und die Namen dieser Spalten ab 14 variieren je nach dem Datensatz, den der Endbenutzer betrachtet.
Der erste Teil des Skripts funktioniert problemlos – er generiert eine Liste der Spaltennamen. Was mir schwerfällt und über alles hinausgeht, was ich bisher in JSL gemacht habe, ist die Rückgabe dieser Liste an eine Tabellenzusammenfassungsfunktion. Ehrlich gesagt habe ich versucht, das Problem mit MS Copilot zu beheben (der AI Agent verwies auf die JMP-Dokumentation), aber ohne Erfolg.
//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 );
Automatisierung und SkriptingBetreff: Dynamisches Übergeben einer Reihe von Spalten an eine TabellenzusammenfassungsfunktionIch glaube, das gibt Ihnen, was Sie wollen
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" )
)
)
);

Betreff: Dynamisches Übergeben einer Reihe von Spalten an eine TabellenzusammenfassungsfunktionSuper, Jim, danke! Ich habe eine kleine Änderung vorgenommen, um die Spaltennamen 14 bis zum Ende zu übergeben, im Gegensatz zu allen Spalten, die nicht zur Gruppierung verwendet wurden. Hier ist die endgültige Version:
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" )
)
)
);