マニュアル:
1。 私は2つのデータテーブルを持っています。1つは管理限界付きのパラメーターリストで、もう1つはメインデータテーブルです。


2。テンプレートの順序に基づいて、各列を手動で[昇順]にソートする必要があります。Contactが2未満の場合(DCは6)またはContactが10より大きい場合(DCは7)、DC列に入力します-DCに値を入力した後、DC値を持つ行を非表示にして除外し、次のパラメータとそれを再度ソートします
複数のパラメーターと大きなデータセットがある場合、ループをどのように実行しますか?
最初に、私はあなたが提供したサンプルデータテーブルを考えると、あなたが話すときにあなたの言い回しに間違いを犯したと思います
」 10を超える連絡先[DCは7] 」 パラメータデータテーブルの値を考えると、あなたが書くつもりだったと思います:
「23を超える連絡先[DCは7]」
これを前提として、以下のスクリプトはあなたが望むもので機能すると信じています。 データテーブルで行ごとに処理する必要はありません。つまり、ソートする必要はありません。 私はそれがあなたが必要とするものであることを願っています
Names Default To Here( 1 );
// Create Sample data tables
dtParms = New Table("Parameters",
Add Rows(4),
New Column("Order",formula(Row())),
New Column("Parameter", character,values({"Contact","MST","Height","Weight"})),
New Column("CL_LL", values([2,23,59,35])),
New Column("CL_UL", values([23,100,109,105])),
New Column("DC_LL", values([6,10,21,33])),
New Column("DC_UL", values([7,11,22,39]))
);
dtMain = New Table("Main",
Add Rows(100),
New Column("Contact", formula(randominteger(1,27))),
New Column("MST", formula(randominteger(18,115))),
New Column("Height", formula(randominteger(50,120))),
New Column("Weight", formula(randominteger(30,110))),
New Column("DC")
);
dtMain << run formulas;
dtMain:Contact << delete formula;
dtMain:MST << delete formula;
dtMain:Height << delete formula;
dtMain:Weight << delete formula;
// Loop through the data and assign the above and below limits
For(i=1,i<=N Rows(dtParms),i++,
foundRows = dtMain << get rows where( as column(dtMain, dtParms:Parameter[i]) < dtParms:CL_LL[i] & isMissing(dtMain:DC) == 1 );
dtMain:DC[foundRows] = dtParms:DC_LL[i];
foundRows = dtMain << get rows where( as column(dtMain, dtParms:Parameter[i]) > dtParms:CL_UL[i] & isMissing(dtMain:DC) == 1);
dtMain:DC[foundRows] = dtParms:DC_UL[i];
);追加質問:
dtParmsをコーディングする代わりに、それらを同じ名前でデータテーブルに格納しましたが、スクリプトを使用したものでは結果が生成されません-ただし、「 スコープ指定されたデータテーブルへのアクセスには、データテーブルの列または変数が必要です{1} "-これに対処するにはどうすればよいですか?
コードの場合:
For(i=1,i<=N Rows(dtParms),i++,
foundRows = dtMain << get rows where( as column(dtMain, dtParms:Parameter[i]) < dtParms:CL_LL[i] & isMissing(dtMain:DC) == 1 );
dtMain:DC[foundRows] = dtParms:DC_LL[i];
foundRows = dtMain << get rows where( as column(dtMain, dtParms:Parameter[i]) > dtParms:CL_UL[i] & isMissing(dtMain:DC) == 1);
dtMain:DC[foundRows] = dtParms:DC_UL[i];
);
正しく機能させるには、変数「dtParms」をパラメータを含むデータテーブルに関連付ける必要があります。 同じ名前でデータテーブルを保存したとのことですが、データテーブルに「パラメータ」という名前を付けたと想定しています。 つまり、スクリプトを実行する前にそのデータテーブルを開き、スクリプトに次のステートメントを追加する必要があります。
dtParms = Data Table("Parameters");