別のテーブルでスクリプトを繰り返す私はそれが繰り返す回数を決定するこの欠陥レベルを持っています。
dtparms << Subset( By( :Defecting_Level ), All rows, Selected columns only( 0 ), columns( :Parameter, :CL_LL, :CL_UL, :MD_LL, :MD_UL ) );
dtParms1 = Data Table( "Defecting_Level=1" );<BR />dtParms2 = Data Table( "Defecting_Level=2" );
これは、存在する欠陥レベルの数に応じて繰り返す必要があるコードです。私の問題は、同じスクリプトを使用して異なるテーブルを反復処理できるかどうかです。または、欠陥レベルの数に応じてこのプロセスをどのように繰り返すことができますか?たとえば、私の脱出レベルは3です。次に、このコードを3回実行して、サブセット化された3つのテーブルを反復処理する必要があります。ありがとう
deftb << New Column( "MD1", numeric );
parameters = Column( dtParms1, "Parameter" ) << get values;
deftb_colnames = deftb << get column names( string );
parameters = Associative Array( Eval( parameters ) );
deftb_colnames = Associative Array( Eval( deftb_colnames ) );
parameters << Intersect( deftb_colnames );
params = parameters << get keys;
For( i = 1, i <= N Items( params ), i++,
foundRows = deftb << get rows where( As Column( deftb, dtParms1:Parameter[i] ) < dtParms1:CL_LL[i] & Is Missing( deftb:MD1 ) == 1 );
deftb:MD1[foundRows] = dtParms1:MD_LL[i];
foundRows = deftb << get rows where( As Column( deftb, dtParms1:Parameter[i] ) > dtParms1:CL_UL[i] & Is Missing( deftb:MD1 ) == 1 );
deftb:MD1[foundRows] = dtParms1:MD_UL[i];
);
分析データ表その他のスクリプティングRe:スクリプトを別のテーブルで繰り返す以下のJSLは、書かれているとおり、機能しないと確信しています。 提供されたサンプルコードには、定義されていないデータテーブルへのポインターが含まれていたため、正確ではない可能性があるいくつかの仮定を行っています。 ただし、私が提供するロジックと構文に従うと、指定した入力パラメーターの数をループするために1つのコードを使用する方法を理解できるはずです。
// By specifying the variable to hold the data table names
// that will be created from the Subset with the By clause
// the variable specified becomes a List with an element
// for each table created
theTables = dtparms << Subset(
By( :Defecting_Level ),
All rows,
columns( :Parameter, :CL_LL, :CL_UL, :MD_LL, :MD_UL )
);
Show( theTables );
For( k = 1, k <= N Items( theTables ), k++,
deftb << New Column( "MD1", numeric );
parameters = Column( theTables[k], "Parameter" ) << get values;
deftb_colnames = deftb << get column names( string );
parameters = Associative Array( Eval( parameters ) );
deftb_colnames = Associative Array( Eval( deftb_colnames ) );
parameters << Intersect( deftb_colnames );
params = parameters << get keys;
For( i = 1, i <= N Items( params ), i++,
foundRows = deftb << get rows where(
As Column( deftb, column( theTables[k],"Parameter")[i] ) < column( theTables[k], "CL_LL")[i] &
Is Missing( deftb:MD1 ) == 1
);
deftb:MD1[foundRows] = column(theTables[k],"MD_LL")[i];
foundRows = deftb << get rows where(
As Column( deftb, column( theTables[k],"Parameter")[i] ) < column( theTables[k], "CL_UL")[i] &
Is Missing( deftb:MD1 ) == 1
);
deftb:MD1[foundRows] = column( theTables[k],"MD_UL")[i];
);
);
Re:スクリプトを別のテーブルで繰り返す素早い回答ありがとうございます!私はフォローアップ質問があります、
deftb << New Column( "MD1"、numeric); =>反復値のストレージとなるので、反復数に応じて(MD1、MD2、MD3 ..)にする必要があります。たとえば、テーブル1の値の反復はMD1に格納され、テーブル2の値の反復はMD2に格納されます。私はこの行を追加しようとしましたが、うまくいきません:
MD = {"MD1"、"MD2"、"MD3"、"MD4"、"MD5"、"MD6"};
For(k = 1、k <= N Items(theTables)、k ++、
deftb << New Column(MD [k + 1]、numeric);
助けてくれてありがとう
Re:スクリプトを別のテーブルで繰り返す以下のコードはどちらも、deftbデータテーブル参照が設定され、theTablesリストにデータが入力されている限り、うまく機能します。 スクリプトが機能しなかったため、ログにはどのエラーメッセージがありましたか?
MD = {"MD1", "MD2", "MD3", "MD4", "MD5", "MD6"};
For( k = 1, k <= N Items( theTables ), k++,
deftb << New Column( MD[k + 1], numeric )
);
// or, why go through all of the work to create the list MD
// when you can easily create the character string required
// for the column name as shown below
deftb = Current Data Table();
For( k = 1, k <= N Items( theTables ), k++,
deftb << New Column( "MD" || char[k + 1]), numeric )
);Re:スクリプトを別のテーブルで繰り返すすぐに説明してくれてありがとう。そして最後の質問、値の列ストレージを作成した後、このループはエラーを表示します。
For(i = 1、i <= N Items(params)、i ++、
foundRows = deftb <<行を取得(
As Column(deftb、column(theTables [k]、"Parameter")[i]) Is Missing(deftb:MD [k + 1])== 1
);
deftb:MD [k + 1] [foundRows] = column(theTables [k]、"MD_LL")[i];
foundRows = deftb <<行を取得(
As Column(deftb、column(theTables [k]、"Parameter")[i]) Is Missing(deftb:MD [k + 1])== 1
);
deftb:MD [k + 1] [foundRows] = column(theTables [k]、"MD_UL")[i];
);
それは私のMD [k + 1]のせいですか?Re:スクリプトを別のテーブルで繰り返すここで何が行われているのかを理解するために必要なことは、変数kの値を決定することです。これにより、theTables [k]の参照が無効な添え字を指している理由がわかります。 これは通常、kをインデックス値としてFor()ループを使用したことが原因であり、For()ループの仕様では、テーブルリストの要素の数を超えてkをインクリメントしているためです。 または、スクリプトの前の部分で使用されていた変数kが、この時点で参照される場合、kの値は不適切です。
スクリプト内の変数kへの参照にカーソルを合わせると、kの現在の値が表示されます。 その後、値がどこから来たのかを知ることができるはずです。
最後に、スクリプトの最初に変数を初期化していないため、変数の値は、スクリプトが最後に終了したときの値に設定されます。 したがって、それも問題を引き起こしている可能性があります。
Re:スクリプトを別のテーブルで繰り返すだから私はこれらのループで再び失われ、theTablesの各テーブルの値ではなく、MD1列内の6の値のみを取得して、それぞれのMD内に配置します。申し訳ありませんが、jmpのForループと本当に混乱しています
theTables = dtparms << Subset(
By( :Dispo_name ),
All rows,
Selected columns only( 0 ),
columns( :Parameter, :CL_LL, :CL_UL, :MD_LL, :MD_UL )
);
//create columns
For( n = 1, n <= N Items( theTables ), n++,
deftb << New Column( "MD" || Char( n ), numeric )
);
//loop through each table and store value in MDs
For( k = 1, k <= N Items( theTables ), k++,
parameters = Column( theTables[k], "Parameter" ) << get values;
deftb_colnames = deftb << get column names( string );
parameters = Associative Array( Eval( parameters ) );
deftb_colnames = Associative Array( Eval( deftb_colnames ) );
parameters << Intersect( deftb_colnames );
params = parameters << get keys;
Show( params );
For( i = 1, i <= N Items( params ), i++,
foundRows = deftb << get rows where(
As Column( deftb, Column( theTables[k], "Parameter" )[i] ) < Column( theTables[k], "CL_LL" )[i] &
Is Missing( deftb:MD ) == 1
);
deftb:MD[foundRows] = Column( theTables[k], "MD_LL" )[i];
foundRows = deftb << get rows where(
As Column( deftb, Column( theTables[k], "Parameter" )[i] ) < Column( theTables[k], "CL_UL" )[i] &
Is Missing( deftb:MD ) == 1
);
deftb:MD[foundRows] = Column( theTables[k], "MD_UL" )[i];
);
);Re:別のテーブルでスクリプトを繰り返す1.1。実際のデータに対してコードをテストできるように、サンプルデータテーブルを添付してください。
2.2。最終的なデータテーブルがどのようになるかを示すモックアップを提供してください。