遍历不同表的脚本我具有此缺陷级别,该缺陷级别确定它将迭代的次数。
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],数字);
谢谢您的帮助
回复:遍历不同表的脚本只要设置了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 )
);回复:遍历不同表的脚本现在工作了,感谢您的迅速解释。最后一个问题,在为值创建列存储之后,此循环显示错误:访问或评估'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的当前值。 然后,您应该能够找出价值的来源。
最后一点....由于您没有在脚本的开头初始化变量,因此变量的值将被设置为脚本最后一次结束时的值。 因此,这也可能导致问题。
回复:遍历不同表的脚本因此,我在这些循环中又一次迷失了,我只在MD1列中得到6的值,而不是从Tables中的每个表中得到值,并将它们放在各自的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];
);
);回复:遍历不同表的脚本1。请附加示例数据表,以便我可以针对实际数据测试代码。
2。请提供您希望最终数据表看起来像的样机。