尝试从列中提取规格限制<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />你好,
我正在尝试提取列规格限制,以便可以在自定义报告中使用,但我遇到了一些奇怪的行为。 下面是我正在做的事情的一个片段:
清除全局变量();
dt = 数据表(“blah”);
cols1 = dt << 获取列名(数字,连续);
For( jj = 1, jj <= N 项( cols1 ), jj++,
spec_x = cols1[jj] << Get Property( "规格限制" );
打印(
字符( jj ) || “:列是” || Char( cols1[jj] << 获取名称 ) ||
”,LSL 是“ ||字符(spec_x [“lsl”])||
”,USL 是“ ||字符(spec_x [“usl”])
);
);
打印语句不是真正的最终用途,但它可以显示我是否以有用的方式提取了限制!
现在,这段代码适用于 2 列的小型测试表:
“1:Col 为 X,LSL 为 1,USL 为 2”
“2:Col 为 Y,LSL 为 3,USL 为 7”
这与我表中的内容相符。 但对于包含 73 列(数字、连续)的较大表,由于某种原因,它无法将任何内容放入 spec_x 中,我只是得到:
“1:Col 为 Rc_N+PO (N/.09/280),LSL 为 .,USL 为 。”
“2:Col 为 Rc_V1 (N/.1/1260),LSL 为 .,USL 为 。”
“3:Col 为 Rc_V2 (N/.1/1188),LSL 为 .,USL 为 。”
“4:Col 为 Rc_V3 (N/.1/1188),LSL 为 .,USL 为 。”
“5:Col 为 Rc_V4 (N/.1/1188),LSL 为 .,USL 为 。”
... ETC
表中肯定有限制数据,我已经仔细检查过! 那么有什么原因可能无法正常工作吗? 表已打开,脚本显然可以正常获取列名称,我只是无法让它达到限制。
当我单步执行脚本并到达 spec_x = cols1[jj] << Get Property( "Spec Limits" ); 时日志显示:
规格限值( LSL( 10 )、USL( 50 )、目标( 30 ) )
但当我执行 print 语句时,它只是说:
“1:Col 为 Rc_N+PO (N/.09/280),LSL 为 .,USL 为 。”
任何帮助表示赞赏!
谢谢,
马修。
回复:尝试从列中提取规格限制现在可以了,谢谢你的帮助:)
回复:尝试从列中提取规格限制好的,看起来,根据创建规范限制的方式,<
dt =新表( “例子” ) ;
dt <<新专栏( “无规格限制” ,数字,连续的) ;
dt <<新专栏( “Rc_N+PO (N/.09/280)” ,
数字,
连续的,
设置属性( “规格限制” ,规格限制( LSL ( 10 ) ,超级激光实验室( 50 ) ,目标( 30 ) ) ) ,
设定值( [ 18.306 , 18.937 , 17.979 ] )
) ;
dt <<新专栏( “测试” ,
数字,
连续的,
设置属性( “规格限制” , { LSL ( 1 ) ,超级激光实验室( 5 ) ,目标( 3 ) ,显示限制( 0 )} ) ,
设定值( [ 2 , 3 , 4 ] )
) ;
第 1 列= dt <<获取列名称(数字,连续的) ;
为了(杰杰= 1 ,杰杰<= N 项(第 1 列) ,杰杰++,
问=第 1 列[杰杰] <<获取财产( “规格限制” ) ;
规格_x =评估清单( {精氨酸(问, 1 ) ,精氨酸(问, 2 ) ,精氨酸(问, 3 )} ) ;
如果( N 行(洛克(规格_x ,空的() ) ) ,
打印(
查尔(杰杰) || “:上校” ||查尔(第 1 列[杰杰] <<得到名字) ||
“,没有规格限制”
) ,
打印(
查尔(杰杰) || “:科尔是” ||查尔(第 1 列[杰杰] <<得到名字) || ”,LSL 是“
||查尔(规格_x [ “LSL” ] ) || “,USL 是” ||查尔(规格_x [ “USL” ] )
)
) ;
) ;
回复:尝试从列中提取规格限制谢谢两位的回复,但还没有运气。 顺便说一句,我在 Win7 上使用 JMP 11.2 64 位。
MS:在创建新的测试表时,您的代码对我来说工作得很好,但在使用我的表时却没有。
dkeshock:您的编辑没有帮助,但确实给了我一个有用的指针如何轻松提取列名称,谢谢:)
我想我现在可能找到了根本原因,但仍然不确定如何解决。 我将其中一列复制到新表中,然后使用手动输入的限制创建一个新的测试列。 该脚本适用于新的测试列:
“1:Col 为 Rc_N+PO (N/.09/280),LSL 为 .,USL 为 。”
“2:Col 为 Test,LSL 为 1,USL 为 5”
所以我查看了两列的脚本(故意限制为几行):
新列(“Rc_N+PO (N/.09/280)”,
数字,连续,格式(“最佳”,10),
设置属性( "规格限值", 规格限值( LSL( 10 ), USL( 50 ), Target( 30 ) ) ),
设置值( [18.306, 18.937, 17.979] )
)
新列(“测试”,
数字,连续,格式(“最佳”,12),
设置属性( "规格限制", {LSL( 1 ), USL( 5 ), Target( 3 ), 显示限制( 0 )} ),
设置值( [2, 3, 4] )
)
看起来规格限制属性的代码是不同的。 我能想到的唯一原因是,对于我的真实数据,我使用功能平台从数据表中导入了规格限制,而对于测试列,我手动输入了它。
这可能是我的问题的根源吗? 有没有办法解决这个问题,或者我是否需要手动输入规格限制(或使用类似 MS 的脚本)?
谢谢你,
马修。
回复:尝试从列中提取规格限制当我第一次测试他的时候,它在我现有表中的 81 列中工作了第 58 列。我发现列名称在同一点上切换了 Cols1 变量中的约定(前 58 个是“:ColumnName”,其余的没有“:”),所以我改用字符串名称,它对我来说效果很好。
在上面的示例中,直到我将两个“Cols1[jj]”更改为“Column(cols1[jj])”之前,它不会在我这边运行。这是有原因的吗?
回复:尝试从列中提取规格限制它应该可以工作,并且在下面的示例中确实如此(JMP 11),该示例基于您的代码。 尝试插入Wait(0)命令来测试是否是性能问题。
//制作示例表
dt =新表( “例子” ) ;
为了(我= 1 ,我<= 100 ,我++,
坳= dt <<新专栏( “测试” ,数字,连续的) ;
评估(评估表达式(坳<<设置属性( “规格限制” , { LSL (表达式(我) ) ,超级激光实验室(表达式(我+ 2 ) ) ,目标(表达式(我+ 1 ) ) ,显示限制( 0 )})))
) ;
//打印规格限制
第 1 列= dt <<获取列名称(数字,连续的) ;
为了(杰杰= 1 ,杰杰<= N 项(第 1 列) ,杰杰++,
规格_x =第 1 列[杰杰] <<获取财产( “规格限制” ) ;
打印(
查尔(杰杰) || “:科尔是” ||查尔(第 1 列[杰杰] <<得到名字) || ”,LSL 是“ ||查尔(规格_x [ “LSL” ] ) || “,USL 是”
||查尔(规格_x [ “我们” ] )
) ;
) ;
回复:尝试从列中提取规格限制这个有用吗?
清除全局变量() ;
dt =数据表(“废话”) ;
第 1 列= dt <<获取列名称(数字,连续的, “细绳” ) ;
项目= N 项(第 1 列) ;
为了(杰杰= 1 ,杰杰<=项目,杰杰++,
规格_x =柱子(第 1 列[杰杰]) <<获取财产( “规格限制” ) ;
打印(
查尔(杰杰) || “:科尔是” ||查尔(第 1 列[杰杰] ) ||
”,LSL 是“ ||查尔(规格_x [ “LSL” ] ) ||
“,USL 是” ||查尔(规格_x [ “我们” ] )
) ;
) ;
回复:尝试从列中提取规格限制与此讨论相关 - 这是我编写的一个简洁的小函数,用于处理拉动规格。 它使用表达式处理和关联数组来制作一个不错的小字典,供以后使用:
getSpecs = Function( {colref},
{default local},
// get the spec limits column property
plist = colref << Get Property("Spec Limits");
// some blank lists to hold the values
keys = {};
values = {};
// loop through the property and get the sub-property name and value
// put those into the correct lists
For Each( {value, index}, plist,
Insert Into( keys, Head Name( value ) );
Insert Into( values, Arg( value, 1) );
);
// build an AA and return as the result of the function
parameters = Associative Array( keys, values );
);
使用看起来像这样:
Names Default To Here( 1 );
Clear Log();
getSpecs = Function( {colref},
{default local},
// get the spec limits column property
plist = colref << Get Property("Spec Limits");
// some blank lists to hold the values
keys = {};
values = {};
// loop through the property and get the sub-property name and value
// put those into the correct lists
For Each( {value, index}, plist,
Insert Into( keys, Head Name( value ) );
Insert Into( values, Arg( value, 1) );
);
// build an AA and return as the result of the function
parameters = Associative Array( keys, values );
);
// open a data table with specs
dt = Open("$Sample_Data/Quality Control/Vial Fill Weights.jmp");
// get the specs from the column
specs = getSpecs(Column("Fill Weight"));
// do something with the values
lsl = specs["LSL"];
tgt = specs["Target"];
usl = specs["USL"];
show(lsl, tgt, usl);