遍歷不同表的腳本我具有此缺陷級別,該缺陷級別確定它將迭代的次數。
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。然後,此代碼需要運行三遍,遍歷作為子集的三個表。謝謝
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];
);
分析工具數據表其他腳本編寫回复:遍歷不同表的腳本我確信,下面編寫的JSL將無法正常工作。 提供的示例代碼具有未定義的數據表的指針,因此,我做出了一些可能不完全正確的假設。 但是,如果您遵循我提供的邏輯和語法,您應該能夠了解如何使您的一段代碼用於遍歷指定數量的輸入參數
// 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];
);
);
回复:遍歷不同表的腳本謝謝您的快速解答!我有一個後續問題,
deftb << New Column(“ MD1”,數字); =>將作為迭代值的存儲,根據迭代次數應為(MD1,MD2,MD3 ..)。例如,表1值的迭代將存儲在MD1中,表2值的迭代將存儲在MD2中,依此類推。我嘗試添加此行,但不起作用:
MD = {“ MD1”,“ MD2”,“ MD3”,“ MD4”,“ MD5”,“ MD6”};
對於(k = 1,k <= N Items(theTables),k ++,
deftb << New Column(MD [k + 1],數字);
謝謝您的幫助
回复:遍歷不同表的腳本現在工作了,感謝您的迅速解釋。最後一個問題,在為值創建列存儲之後,此循環顯示錯誤:訪問或評估'theTables [k]',theTables [/ * ### * / k]的下標範圍{1}
對於(i = 1,i <= N Items(params),i ++,
foundRows = deftb <<獲取行,其中(
如Column(deftb,column(theTables [k],“ Parameter”)[i])是否缺少(deftb:MD [k + 1])== 1
);
deftb:MD [k + 1] [foundRows] =列(theTables [k],“ MD_LL”)[i];
foundRows = deftb <<獲取行,其中(
如Column(deftb,column(theTables [k],“ Parameter”)[i])是否缺少(deftb:MD [k + 1])== 1
);
deftb:MD [k + 1] [foundRows] =列(theTables [k],“ MD_UL”)[i];
);
是因為我的MD [k + 1]嗎?回复:遍歷不同表的腳本要弄清楚這裡發生的事情,您要做的就是確定變量k的值,它會告訴您為什麼引用theTables [k]指向無效的下標。 通常,這是因為您使用了以k為索引值的For()循環,並且在For()循環的規範中,您將k增加到超出Tables列表中元素的數量。 或者,變量k在腳本的上一部分中使用了什麼,並且在此時引用該變量時,k的值不合適。
如果將鼠標懸停在腳本中對變量k的任何引用上,它將顯示k的當前值。 然後,您應該能夠找出價值的來源。
最後一點....由於您沒有在腳本的開頭初始化變量,因此變量的值將被設置為腳本最後一次結束時的值。 因此,這也可能導致問題。