将项目从计算的统计数据传递到保存的数据表中的特定坐标我生成了几个带有计算统计数据的图表。 我想传递特定的计算统计参数,例如最小值、中值和最大值分位数和标准差来自汇总统计使用 JSL 保存数据表中的特定坐标。
例如,我想继续
- 第 5 行第 7 列的最小分位数
- 第 5 行第 8 列的中位数
- 第 5 行第 9 列的最大分位数
- 标准差到第 5 行第 10 列。
到我保存的数据表。 如何使用 JSL 实现此目的?
(开始保存的数据表中坐标为空)
数据表图形脚本回复:将项目从计算的统计数据传递到保存的数据表中的特定坐标谢谢。 这行得通。 来自 Matlab 和 C# 我仍然习惯 JSL 的思维方式。
回复:将项目从计算的统计数据传递到保存的数据表中的特定坐标仔细看看你的代码。您正在将 include 函数的返回值分配给 resultsdt。 该返回值是包含的文件所做的最后一件事,其计算结果为“H”。它不是数据表。
编辑:
要么 (1) 添加最后一行到 basicTable.jsl 说
resultsdt;
或(2)像这样更改包含(添加评论)
/*resultsdt =*/ include ("basicTable.jsl");
我认为 (1) 似乎更接近您的期望。 它确保最后评估的是保存数据表的变量,然后作为 include() 的结果返回。
(2) 也可能会起作用,这取决于本地行为并使用相同的变量名。 我认为这将有点不可预测,具体取决于您是否在每个地方都使用 namesDefaultToHere 以及 resultsdt 是否已经存在。 不确定如果不进行测试将如何工作。
回复:将项目从计算的统计数据传递到保存的数据表中的特定坐标该声明
Column(resultsdt, "Column 1")[8] ="H";
只是传递一个参数名称H到第 1 列的第 8 行。 另一种定义方式结果
Names Default To Here (1);
// set up a table to accept the results
resultsdt = New Table( "Results Table",
Add Rows( 8),
New Column( "Column 1" ),
New Column( "Column 2" ),
New Column( "Column 3" ),
New Column( "Column 4" ),
New Column( "Column 5" ),
New Column( "Column 6" ),
New Column( "Min", Numeric ),
New Column( "Median", Numeric ),
New Column( "Max", Numeric ),
New Column( "SD", Numeric )
);
resultsdt:Column 1[1] ="A";
resultsdt:Column 1[2] ="B";
resultsdt:Column 1[3] ="C";
resultsdt:Column 1[4] ="D";
resultsdt:Column 1[5] ="E";
resultsdt:Column 1[6] ="F";
resultsdt:Column 1[7] ="G";
resultsdt:Column 1[8] ="H";
使用时也不起作用
resultsdt = include ("basicTable.jsl");
但是,如果我将第 1 列留空,代码运行正常。 解决此问题的任何帮助都是有用的。
回复:将项目从计算的统计数据传递到保存的数据表中的特定坐标
resultsdt = include ("basicTable.jsl");
如果该文件是您显示的内容,则问题是 resultsdt 不是数据表,而是(也许?)无论它的计算结果是什么
Column(resultsdt, "Column 1")[8] ="H";
这可能是“H”。 include 函数的结果是最后计算的结果。 (与你的笔记一致。)
是的,错误消息没有您希望的那么有用。 @Audrey_Shull - 它应该指向 = 的左边,而不是右边。
回复:将项目从计算的统计数据传递到保存的数据表中的特定坐标谢谢@Craige_Hales . 我现在对这个问题有了更好的理解。 但是仍然存在故障。 以下工作按预期进行
Names Default To Here (1);
delete symbols ();
clear log ();
// set up a table to accept the results
resultsdt = New Table( "Results Table",
Add Rows( 8),
New Column( "Column 1" ),
New Column( "Column 2" ),
New Column( "Column 3" ),
New Column( "Column 4" ),
New Column( "Column 5" ),
New Column( "Column 6" ),
New Column( "Min", Numeric ),
New Column( "Median", Numeric ),
New Column( "Max", Numeric ),
New Column( "SD", Numeric )
);
Column(resultsdt, "Column 1")[1] = "A";
Column(resultsdt, "Column 1")[2] = "B";
Column(resultsdt, "Column 1")[3] = "C";
Column(resultsdt, "Column 1")[4] = "D";
Column(resultsdt, "Column 1")[5] = "E";
Column(resultsdt, "Column 1")[6] = "F";
Column(resultsdt, "Column 1")[7] = "G";
Column(resultsdt, "Column 1")[8] ="H";
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
getDistChart = Function({ColName, _LSL, _USL}, {distChart},
New Window(""||ColName||" distribution",
distChart = dt << Distribution(
Stack( 1 ),
Continuous Distribution(
Column(As Column (ColName) ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Capability Analysis( LSL(_LSL ), USL(_USL) )
),
SendToReport(
Dispatch(
{},
"Distrib Histogram",
FrameBox,
{DispatchSeg( LabelSeg( 1 ), {Font( "Segoe UI", 7, "Plain" )} ),
DispatchSeg( LabelSeg( 2 ), {Font( "Segoe UI", 7, "Plain" )} )}
)
)
);
);
return(distChart);
);
dist = getDistChart ("weight", 55, 185);
toPass= Report( dist )[Outline Box("weight" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box(1)]<< get (1);
//resultsdt = include ("basicTable.jsl");
resultsdt[1, 2] = toPass;
//show (toPass);
但是,如果我定义结果分别如下
Names Default To Here (1);
// set up a table to accept the results
resultsdt = New Table( "Results Table",
Add Rows( 8),
New Column( "Column 1" ),
New Column( "Column 2" ),
New Column( "Column 3" ),
New Column( "Column 4" ),
New Column( "Column 5" ),
New Column( "Column 6" ),
New Column( "Min", Numeric ),
New Column( "Median", Numeric ),
New Column( "Max", Numeric ),
New Column( "SD", Numeric )
);
Column(resultsdt, "Column 1")[1] = "A";
Column(resultsdt, "Column 1")[2] = "B";
Column(resultsdt, "Column 1")[3] = "C";
Column(resultsdt, "Column 1")[4] = "D";
Column(resultsdt, "Column 1")[5] = "E";
Column(resultsdt, "Column 1")[6] = "F";
Column(resultsdt, "Column 1")[7] = "G";
Column(resultsdt, "Column 1")[8] ="H";
然后如下调用它(这就是我设置实际代码的方式)
Names Default To Here (1);
delete symbols ();
clear log ();
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
getDistChart = Function({ColName, _LSL, _USL}, {distChart},
New Window(""||ColName||" distribution",
distChart = dt << Distribution(
Stack( 1 ),
Continuous Distribution(
Column(As Column (ColName) ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Capability Analysis( LSL(_LSL ), USL(_USL) )
),
SendToReport(
Dispatch(
{},
"Distrib Histogram",
FrameBox,
{DispatchSeg( LabelSeg( 1 ), {Font( "Segoe UI", 7, "Plain" )} ),
DispatchSeg( LabelSeg( 2 ), {Font( "Segoe UI", 7, "Plain" )} )}
)
)
);
);
return(distChart);
);
dist = getDistChart ("weight", 55, 185);
toPass= Report( dist )[Outline Box("weight" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box(1)]<< get (1);
resultsdt = include ("basicTable.jsl");
resultsdt[1, 2] = toPass;
//show (toPass);
我得到错误
Not subscriptable value{8} in access or evaluation of 'Assign' , resultsdt[1, 2] = /*###*/toPass/*###*/
我哪里错了?
(我注意到,如果我根本不定义第 1 列中的条目,则上述两种方法都可以正常工作)
回复:将项目从计算的统计数据传递到保存的数据表中的特定坐标2个问题,返回的局部变量从来没有赋值过任何东西,需要将数据表传递给用户函数。 像这样的东西
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
getDistChart = Function( {dt, ColName, _LSL, _USL},
{distChart},
New Window( "" || ColName || " distribution",
distChart = dt << Distribution(
Stack( 1 ),
Continuous Distribution(
Column( As Column( ColName ) ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Capability Analysis( LSL( _LSL ), USL( _USL ) )
),
SendToReport(
Dispatch(
{},
"Distrib Histogram",
FrameBox,
{DispatchSeg( LabelSeg( 1 ), {Font( "Segoe UI", 7, "Plain" )} ),
DispatchSeg( LabelSeg( 2 ), {Font( "Segoe UI", 7, "Plain" )} )}
)
)
)
);
Return( distChart );
);
dist = getDistChart( dt, "weight", 55, 185 );
在 JMP 中,<< 运算符是发送操作员并将消息(在右侧)发送到脚本对象, 在左边。 数据表 (dt) 是一个可编写脚本的对象,但它不知道消息获取DistChart . 它确实了解内置平台,例如分配. 脚本索引显示数据表的所有消息名称。
回复:将项目从计算的统计数据传递到保存的数据表中的特定坐标@ron_horne . 以下内容应该有助于更清楚地说明问题,因为它与我的实际问题非常相似。 我通过一个函数得到分布图。
Names Default To Here (1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
getDistChart = Function({ColName, _LSL, _USL}, {distChart},
New Window(""||ColName||" distribution",
Distribution(
Stack( 1 ),
Continuous Distribution(
Column(As Column (ColName) ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Capability Analysis( LSL(_LSL ), USL(_USL) )
),
SendToReport(
Dispatch(
{},
"Distrib Histogram",
FrameBox,
{DispatchSeg( LabelSeg( 1 ), {Font( "Segoe UI", 7, "Plain" )} ),
DispatchSeg( LabelSeg( 2 ), {Font( "Segoe UI", 7, "Plain" )} )}
)
)
);
);
return(distChart);
);
dist = dt << getDistChart ("weight", 55, 185);
在我看来,最后一行似乎没有做它应该做的从分布中提取值的事情,因为首先没有分布被绘制。 现在的问题是,当通过上面的函数绘制分布时,如何获取计算统计值。 也许函数不是消息,所以不能使用 << 发送到对象?
任何帮助都会非常有用,因为我仍在学习 JMP。
回复:将项目从计算的统计数据传递到保存的数据表中的特定坐标再次感谢@ron_horne ,但这两个都不起作用,并给我同样的错误。
您是说以下是正确有效的用法吗? 注意是不密谋如果像下面那样使用分布(顺便说一句,我不明白的功能距离在距离=dt ?)
Output = Report( dist = dt << getDistribution("ColName", "LSL", "USL", "other input parameters") );
和错误(从日志中复制)
Send Expects Scriptable Object{8} in access or evaluation of 'Send' , Output[Outline Box( "height" ), Outline Box( "Quantiles" ),
Table Box( 1 ), Number Col Box( 1 )] << /*###*/get( 1 ) /*###*/Not subscriptable value{8} in access or evaluation of 'Assign' , resultsdt[5, 9] = /*###*/Output[Outline Box( "Pass Distribution" ),
Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << /*###*/get( 1 ) /*###*/
/*###*/
我得到的是由于我的以下陈述(即使您在下面提出建议)
resultsdt[5, 9] = Output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1)] << get( 1 ); // max
如果,是的,我想做一个简单的测试并将更直接的东西传递给 resultsdt。 我可以做一个简单的测试来测试我是否可以从输出到数据表结果?
回复:将项目从计算的统计数据传递到保存的数据表中的特定坐标你好@尼奥,
如果我正确理解您的问题,您需要注意编号和地址。一旦使用了轮廓框的名称,表格框和编号列框的编号就从 1 开始。
因此,请尝试以下操作:
resultsdt[5, 9] = Output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1)] << get( 1 ); // max
如果你想使用 Number Col Box (11) 试试这个:
resultsdt[5, 9] = Output[Number Col Box( 11)] << get( 1 ); // max
希望这现在有效。
通常,有很多更奇特的方法可以让脚本使用 xpath () 或模式匹配找到感兴趣的值的位置,如以下链接所示: http://www.pega-analytics.co.uk/blog/oneway-advisor-step-3/
回复:将项目从计算的统计数据传递到保存的数据表中的特定坐标谢谢@ron_horne . 让我试着概述一下我正在尝试做的事情。 我的主要脚本具有以下(此处已简化)流程。
打开一个数据表(并将其命名为dt ), 然后使用函数绘制其中几列的分布图
getDistribution ("ColName", "LSL", "USL", "other input parameters")
每个生成的分布图都有“分位数”、“汇总统计”和“能力分析(关闭轮廓)”。
主脚本的下一部分是创建一个表(我们称之为结果) 有几行和几列,我需要在其中传递原始帖子中指示的计算统计值。
但是,以下不起作用。
output = Report( dist = dt << getDistribution("ColName", "LSL", "USL", "other input parameters") );
resultsdt[5, 9] = Output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 6 ), Number Col Box( 11)] << get( 1 ); // max
我已经确定 Table Box () 和 Number Col Box () 中的数字是正确的。 我收到以下错误
Send Expects Scriptable Object{8} in access or evaluation of 'Send' , output[Outline Box( "height" ), Outline Box( "Quantiles" ),
Table Box( 6 ), Number Col Box( 11 )] << /*###*/get( 1 ) /*###*/
我哪里错了?
回复:将项目从计算的统计数据传递到保存的数据表中的特定坐标嗨尼奥,
您对 distb 的引用不起作用正弦 distb 不是任何报告层。它是分析层。 在 JMP 中,它们之间存在差异。
为了从输出中提取任何内容,您需要明确引用报告层。
看到这个:将分析中的统计数据提取到报告中如果您有多个输出,则需要正确命名和定义它们,以确保获得您想要的值。
让我们知道它是否有效。否则,请考虑从给您带来问题的角度提供一些文件和脚本。
一切顺利,
罗恩
回复:将项目从计算的统计数据传递到保存的数据表中的特定坐标@ron_horne . 谢谢。 我花了一些时间重新编码,这样我就可以拥有可以将计算统计值的“结果表”传递给它。
我已经从你的建议开始,并向上帝提问。 为什么这不起作用?
distb = Distribution( Continuous Distribution( Column( :height ) ) ) ;
// Extract min median max and SD
resultsdt[5, 7] = distb[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 11 ); // min
resultsdt[5, 8] = distb[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 6 ); // median
resultsdt[5, 9] = distb[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 1 ); // max
resultsdt[5, 10] = distb[Outline Box( "height" ), Outline Box( "Summary Statistics" ), Number Col Box( 1 )] << get( 2 ); // Std dev.
为什么一定要这样?
output = Report( dist = dt << Distribution( Continuous Distribution( Column( :height ) ) ) );
我有多个分布图,我可以轻松地为它们分配一个名称,例如 distb1、distb2……但是如果我需要的话
output = Report( dist = dt << Distribution( ..... ) );
我将需要检查这如何影响我的其余代码。
回复:将项目从计算的统计数据传递到保存的数据表中的特定坐标
你好@尼奥
据我所知,JMP 无法将数据设置到已关闭表格的单元格中。
如果这里的其他人知道得更多,请告诉我们。
也许您可以打开另一个表作为中介,以便在您仍在收集时将信息保存在那里,并且仅在最后打开最终结果表。
罗恩
回复:将项目从计算的统计数据传递到保存的数据表中的特定坐标谢谢@ron_horne . 我认为这会起作用。 但是,在解决我的实际问题之前,我有一个问题。 “结果表”是否需要在将值传递给它之前打开?
在我的例子中,“结果表”是一个保存的文件,我不打算打开它,除非不可能将值传递给它。
(如果我需要在将值传递给实例时打开“结果表”,我将需要更改其余代码)
回复:将项目从计算的统计数据传递到保存的数据表中的特定坐标你好@尼奥
看看你是否可以从这个脚本中提取你需要的东西
Names Default To Here( 1 );
// set up a table to accept the results
resultsdt = New Table( "Results Table",
Add Rows( 20 ),
New Column( "Column 1" ),
New Column( "Column 2" ),
New Column( "Column 3" ),
New Column( "Column 4" ),
New Column( "Column 5" ),
New Column( "Column 6" ),
New Column( "Min", Numeric ),
New Column( "Median", Numeric ),
New Column( "Max", Numeric ),
New Column( "SD", Numeric )
);
// Open Data Table: Big Class.jmp
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// Launch platform: Distribution
output = Report( dist = dt << Distribution( Continuous Distribution( Column( :height ) ) ) );
// Extract min median max and SD
resultsdt[5, 7] = output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 11 ); // min
resultsdt[5, 8] = output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 6 ); // median
resultsdt[5, 9] = output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 1 ); // max
resultsdt[5, 10] = output[Outline Box( "height" ), Outline Box( "Summary Statistics" ), Number Col Box( 1 )] << get( 2 ); // Std dev.
当谈到从输出中提取数字时,需要小心。 如果输出因偏好而不同或仅在一个窗口中包含多个输出,则对位置的正确引用可能会发生变化。
让我们知道它是否有效。
罗恩
回复:将项目从计算的统计数据传递到保存的数据表中的特定坐标我认为数据表下标可以帮助你
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt[10,3] = "AAAAAAAAAAAAAA";