你好,
我正在尝试从主数据表生成摘要表。
到目前为止,我已经能够将所有指标放在第 1 列,并进行分组(第 2 列)。
然后我可以用计数、平均值、标准差、+4sigma、-4sigma 进行填充。
下一步是添加平均值和标准差的置信区间(95%):与以下分析中的方法相同:
通过 X > 均值和标准差拟合 Y。
我可以使用 FOR() 循环逐个运行所有分析,并使用 DisplayBox 选择每个值并填充我的摘要数据表,但我真的不想这样做,因为它会大大减慢分析速度,因为我通常处理 1000 多个指标和 10000 多行。
在此先感谢您的帮助
- 传教士
附件是我调用 BIG CLASS.JMP 的脚本作为示例
Names Default To Here( 1 );
clear symbols();
Deletesymbols();
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
SplitBy = "sex";
//Get a list from all unique configs
summarize(ColumnSplitBy=by(Column (dt, SplitBy)));
show(ColumnSplitBy);
For( i = N Items( ColumnSplitBy ), i > 0, i--,
If( ColumnSplitBy[i] == "",
Remove From( ColumnSplitBy, i, 1 );
)
);
//Get only numeric Columns
MetricCols = dt << Get Column Names( numeric, continuous );
//Create a new table to collect the stats from the "Test" table
CpkTable = New Table( "Summary Table",
New Column( "Metric", "Character", "Nominal" ),
New Column( SplitBy, "Character", "Nominal" ),
New Column( "N", "Numeric", "Continuous" ),
New Column( "LSL", "Numeric", "Continuous" ),
New Column( "USL", "Numeric", "Continuous" ),
New Column( "Mean", "Numeric", "Continuous" ),
New Column( "StdDev", "Numeric", "Continuous" ),
New Column( "+4σ", "Numeric", "Continuous", formula(:Mean + :StdDev * 4) ),
New Column( "-4σ", "Numeric", "Continuous", formula(:Mean - :StdDev * 4) ),
);
show(MetricCols);
for(i=1,i <= N Items(MetricCols) ,i++,
show(i);
// Calculate Stats
Summarize(dt, exg = by(Column (dt, SplitBy)),
exc = Count((Column (dt, Eval(Eval Expr(Expr(Char(MetricCols[i]))))))),
exm = Mean((Column (dt, Eval(Eval Expr(Expr(Char(MetricCols[i]))))))),
exstd = StdDev((Column (dt, Eval(Eval Expr(Expr(Char(MetricCols[i]))))))),
);
Limits = Column(dt,MetricCols[i]) << GetProperty ("Speclimits");
//Loop to run through all configs and fill the table
For( j= 1 ,j <= NItems(ColumnSplitBy) , j++,
Show(j );
y = Eval Expr(
CpkTable << AddRows(
{:Metric = Expr(Char( MetricCols[i] ) ) ;
As Column(Splitby) = Expr(Char( ColumnSplitBy[j] ) ) ;
:LSL= Expr(Try(Limits["LSL"]));
:USL= Expr(Try(Limits["USL"]));
:N= exc[j];
:Mean= exm[j];
:StdDev= exstd[j];
};)
);
Print(y);
Try(Eval(y));
); //For j */
); //For i嗨,贾莫,
是的,我尝试了上述脚本,它在大数据文件上运行顺畅且快速。
非常感谢!!
- 传教士
su我假设你希望提取每个级别的所有这些

我认为这可能会更快(至少编写脚本更容易)
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Probe.jmp", invisible);
cont_cols = dt << Get Column Names("Continuous", "String");
ow = dt << Oneway(
Y(Eval(cont_cols)),
X(:Site),
Means and Std Dev(1),
SendToReport(
Dispatch(
{"Means and Std Deviations"},
"Std Dev Lower 95%",
NumberColBox,
{Visibility("Visible")}
),
Dispatch(
{"Means and Std Deviations"},
"Std Dev Upper 95%",
NumberColBox,
{Visibility("Visible")}
)
),
Invisible
);
tb = Report(ow[1])[Outline Box("Means and Std Deviations"), Table Box(1)];
dt_stats = tb << Make Combined Data Table;
tb << close window;
</CODE>You can run Oneway for all of your columns at the same time WITH Means and Std Dev enabled (and "hidden" columns visible), get reference to first table box and then use << Make Combined Data Table. You will get result like this</P>
<P> </P>
<P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jthi_2-1716921037152.png" style="width: 400px;"><span class="lia-inline-image-display-wrapper" image-alt="jthi_2-1716921037152.png" style="width: 400px;"><img src="https://us.v-cdn.net/6038925/uploads/images/64563iD1351A0AB3071D45/jthi_2-1716921037152.png" role="button" title="jthi_2-1716921037152.png" alt="jthi_2-1716921037152.png" /></span></SPAN></P>
<P>然后您应该能够使用 Update 将您需要的那些列添加到最终表中。</P>
<P> </P>
<P>如果由于某种原因这不起作用,则可以使用循环,并且有几种方法可以做到这一点。使用<<制作成数据表并更新或将表框中的结果放入列表中(<<获取可能就足够了)并使用列表+数据表下标更新数据。</P></LINGO-BODY><LINGO-SUB id="lingo-sub-761889" slang="en-US" mode="CREATE">回复:使用主要和标准差置信区间填充汇总表</LINGO-SUB><LINGO-BODY id="lingo-body-761889" slang="en-US" mode="CREATE"><P>你好,贾莫,</P><P> </P><P>非常感谢,脚本运行需要 8 到 10 秒,这非常棒,因为 PROBE.JMP 是一个相当大的文件。</P><P> </P><P>您有什么技巧可以为每个指标和分组填充“ <STRONG>tb_vals”</STRONG>摘要表吗?我尝试一次填充每个值,但现在我的脚本非常慢。有没有办法快速将整个矩阵填充到表中?</P></LINGO-BODY><LINGO-SUB id="lingo-sub-761834" slang="en-US" mode="CREATE">回复:使用主要和标准差置信区间填充汇总表</LINGO-SUB><LINGO-BODY id="lingo-body-761834" slang="en-US" mode="CREATE"><P>我的回答没有回答问题</P>
<P> </P>
<PRE><CODE class=" language-jsl">
我不确定您所说的“很多”是什么意思,但我仍然会首先尝试使用 fit y by x 平台。
尽可能少地打开它并将其作为不可见报告打开(或根据 jmp 版本而定的私有报告)。提取值后将其关闭。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Probe.jmp", invisible);
cont_cols = dt << Get Column Names("Continuous", "String");
start = Tick Seconds();
For Each({cont_col}, cont_cols,
fit = dt << Oneway(
Y(Eval(cont_col)),
X(:Site),
Invisible
);
tb_vals = Report(fit)[Outline Box("Means and Std Deviations"), Table Box(1)] << get;
fit << close window;
// save results from tb_vals
);
end = Tick Seconds();
show(end - start);