bin01、bin02、...bin16 の一般的なヘッダーを持つ大量のデータを収集する一般的なクエリを実行した後、レシピに基づくビン情報を持つ別のテーブルに基づいて列ヘッダーを更新したいと思います。これは、munger コマンドを使用すると簡単な作業のように見えますが、ネストされたループに配置するとエラーになります。同じ構文が単一のループ形式で機能しますが、1 から 16 までの可変数のビン値を置き換えることができるため、ループ構造が推奨されます。サンプル データ テーブルと JSL を添付しました。推奨事項があれば、ぜひお知らせください。この問題に JMP16.1 を使用して取り組んでいます。
これは、サンプル データ テーブルで動作するスクリプトの修正です。主な変更点は、 Set () 内でエラーが発生したときにコードが停止しないようにする Try() 関数の追加です。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Need to update data table based on bins in recipe, name and get rid of Bin Cols no data was collected, bins greater that number defined by bin size list
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Referance: https://community.jmp.com/t5/JMP-Scripts/Find-amp-Replace-for-Column-Names/ta-p/217124
b = Data Table( "BinSizeList" ):Name( "CntBins" ) << get values;
Show( b );
Show( b[1] );
bnum = Data Table( "BinSizeList" ):Name( "Label" ) << get values;
Show( bnum );
bsize = Data Table( "BinSizeList" ):Name( "Bin_Label" ) << get values;
Show( bsize );
Data Table( "LPD_Data" ) << Select Columns( ALL );
cols = Data Table( "LPD_Data" ) << Get Selected Columns();
Show( cols );
// Nested loop does not work? Error on "set name" comand only when nested j loop is included. Works fine if j for statement is removed and [ j ] replaced with a valid number
For( i = 1, i <= N Items( cols ), i++,
For( j = 1, j <= b[1], j++,
Try(
cols[i] << set name(
Munger(
Char( cols[i] ), // << get name,
1,
Eval( Char( bnum[j] ) ),
Eval( Char( bsize[j] ) )
)
)
)
)
);
ご協力いただきありがとうございます。TRY コマンドは初めて見ました。うまくいきました。