手動的 :
1.我有2個數據表,一個是帶有控制限制的參數列表,另一個是主數據表。


2.我必鬚根據模板中的順序手動[升序]對每一列進行排序。 如果 Contact 小於 2 [DC 為 6] 或 Contact 大於 10 [DC 為 7] 並將其放在 DC 列中 -- 在 DC 中輸入值後,我隱藏並排除具有 DC 值的行並繼續下一個參數並再次排序
如果我有多個參數和一個大數據集,我該如何做循環?
對於代碼:
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");跟進問題:
我不必對 dtParms 進行編碼,而是將它們存儲到具有相同名稱的數據表中,但它不會與使用腳本的數據表產生結果——但它確實顯示“範圍數據表訪問需要數據表列或變量{1}“ - 我該如何解決這個問題?
首先,我相信,鑑於您提供的示例數據表,您在談論時用詞錯誤
"觸點大於 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];
);