你好,
尽管一列中有测量值,第二列中有状态,但我无法复制我在 Minitab 中看到的内容。您能分享结果图片吗?
洞- 之前 13,9445
洞 - 后 13,9612
洞- 之前 14,031
洞 - 后 14,0403
洞- 之前 14,2363
洞 - 后 14,0423
洞- 之前 14,0605
洞 - 后 13,9773
洞- 之前 14,2448
洞 - 14,0903 后
孔- 14,3006 之前
洞 - 后 13,9198
洞- 之前 14,0294
洞 - 后 13,9568
洞- 之前 13,9381
洞 - 后 13,9731
洞- 14,1617 之前
洞 - 后 14,0621
洞- 之前 13,8853
洞 - 后 14,0253
洞- 之前 14,0038
洞 - 后 14,0468
洞- 之前 13,6758
洞 - 后 14,0333
洞- 之前 13,6735
洞 - 后 14,1074
洞- 之前 14,1156
洞 - 后 14,0396
洞- 之前 14,2386
洞 - 后 13,9335
洞- 之前 14,1268
洞 - 后 13,9734
洞- 之前 13,8388
洞 - 14,0022 后
洞- 之前 14,0422
洞 - 后 13,9869
洞- 之前 13,9771
洞 - 后 13,9939
洞- 之前 13,9529
洞 - 后 14,0271
洞- 之前 14,0051
洞 - 14,0045 后
洞- 之前 13,9315
洞 - 13,972 后
洞- 之前 13,9159
洞 - 后 13,9924
洞- 之前 14,0973
洞 - 后 13,9723
洞- 之前 14,1115
洞 - 后 13,9787
洞- 之前 14,0744
洞 - 后 13,9936
洞- 之前 14,332
洞 - 后 13,9986
洞- 之前 13,7861
洞 - 14,041 后
洞- 14,1448 之前
洞 - 13,902 后
洞- 之前 14,0634
洞 - 后 13,9935
如果您想复制 Minitab 报告表格,这里有一个非常粗糙的硬编码版本。它可以很容易地被放入通用格式并作为 JMP 插件添加。但我将把这留给您自己去做

这仅使用 JSL,从我之前提供的输出中获取对象,然后重新格式化为 Minitab 表单。它需要进行大量清理和通用化。
这是代码的第一次传递
Names Default To Here( 1 );
dt = Current Data Table();
dis = dt << Distribution( invisible,
SendToByGroup( {:Before After == "Hole - Before"} ),
Continuous Distribution( Column( :Measurement ), Process Capability( Use Column Property Specs ) ),
By( :Before After ),
Group Options( Layout( "Horizontal List" ) ),
SendToByGroup(
{:Before After == "Hole - Before"},
SendToReport(
Dispatch( {"Measurement", "Process Capability", "Measurement Capability", "Nonconformance"},
"Observed PPM", NumberColBox,
{Visibility( "Visible" )}
)
)
),
SendToByGroup(
{:Before After == "Hole - After"},
SendToReport(
Dispatch( {"Measurement", "Process Capability", "Measurement Capability", "Histogram"},
"Process Capability Analysis Histogram", FrameBox,
{DispatchSeg( CustomStreamSeg( 1 ), {Font} )}
),
Dispatch( {"Measurement", "Process Capability", "Measurement Capability", "Nonconformance"},
"Observed PPM", NumberColBox,
{Visibility( "Visible" )}
)
)
)
);
// Build the report
// Set the Histograms to the same axis
theMin = Min(
Report( Dis[1] )["Histogram", AxisBox( 1 )] << get min,
Report( Dis[2] )["Histogram", AxisBox( 1 )] << get min
);
theMax = Max(
Report( Dis[1] )["Histogram", AxisBox( 1 )] << get max,
Report( Dis[2] )["Histogram", AxisBox( 1 )] << get max
);
Report( Dis[1] )["Histogram", AxisBox( 1 )] << Min( theMin );
Report( Dis[1] )["Histogram", AxisBox( 1 )] << Max( theMax );
Report( Dis[2] )["Histogram", AxisBox( 1 )] << Min( theMin );
Report( Dis[2] )["Histogram", AxisBox( 1 )] << Max( theMax );
Summarize( dt, baGroups = by( :Before After ) );
nw = New Window( "Report",
Outline Box( "Before/After Capability Comparison for " || baGroups[1] || " vs. " || baGroups[2],
V List Box(
H List Box(
Text Box( "Before: " || baGroups[1] ),
Spacer Box( size( 200, 0 ) ),
Text Box( "Process Performance Report" )
),
Text Box( "After: " || baGroups[2] )
),
Spacer Box( size( 0, 5 ) ),
Lineup Box( N Col( 2 ),
Outline Box( "Capability Histogram",
lub1 = Lineup Box( N Col( 1 ),
H List Box( Spacer Box( size( 60, 0 ) ), Text Box( "Are the data inside the limits?" ) )
)
),
V List Box(
obPC = Outline Box( "Process Characterization" ),
Spacer Box( size( 0, 15 ) ),
obCS = Outline Box( "Capability Statistics" )
)
)
)
);
lub1 << Append( Report( Dis[1] )["Histogram", framebox( 1 )] );
lub1 << Append(
Border Box( top( 0 ), bottom( 0 ), Left( 0 ), Right( 0 ), sides( 15 ),
Text Box( " Before" )
)
);
lub1 << Append(
Border Box( top( 0 ), bottom( 0 ), Left( 0 ), Right( 0 ), sides( 15 ),
Report( Dis[1] )["Histogram", framebox( 2 )]
)
);
lub1 << Append(
Border Box( top( 0 ), bottom( 0 ), Left( 0 ), Right( 0 ), sides( 15 ),
Text Box( " After" )
)
);
lub1 << Append(
Border Box( top( 0 ), bottom( 0 ), Left( 0 ), Right( 0 ), sides( 15 ),
Report( Dis[2] )["Histogram", framebox( 2 )]
)
);
lub1 << Append(
Border Box( top( 0 ), bottom( 0 ), Left( 0 ), Right( 0 ), sides( 15 ),
Report( Dis[1] )["Histogram", axisbox( 1 )]
)
);
// Build Process Characterization table
beforePCList = Report( Dis[1] )["Process Summary", Number Col Box( 1 )] << get;
Remove From( beforePCList, 1, 2 );
Remove From( beforePCList, 5, 1 );
Insert Into( beforePCList, 1, 2 );
afterPCList = Report( Dis[2] )["Process Summary", Number Col Box( 1 )] << get;
Remove From( afterPCList, 1, 2 );
Remove From( afterPCList, 5, 1 );
Insert Into( afterPCList, 1, 2 );
changeList = {., .};
Insert Into( changeList, beforePCList[3] - afterPCList[3] );
Insert Into( changeList, beforePCList[4] - afterPCList[4] );
Insert Into( changeList, beforePCList[5] - afterPCList[5] );
obPC << append(
Table Box(
String Col Box( "", {"Total N", "Subgroup size", "Mean", "STDev(within)", "StDev(overall)"} ),
Number Col Box( "Before", beforePCList ),
Number Col Box( "After", afterPCList ),
Number Col Box( "Change", changeList )
)
);
beforeCSList = {.};
Insert Into( beforeCSList, (Report( Dis[1] )["Overall Sigma Capability", Number Col Box( 1 )] << get)[4] );
Insert Into( beforeCSList, (Report( Dis[1] )["Overall Sigma Capability", Number Col Box( 1 )] << get)[1] );
Insert Into( beforeCSList, . );
Insert Into( beforeCSList, (Report( Dis[1] )["Nonconformance", Number Col Box( 1 )] << get)[3] );
Insert Into( beforeCSList, (Report( Dis[1] )["Nonconformance", Number Col Box( 3 )] << get)[3] );
Insert Into( beforeCSList, (Report( Dis[1] )["Nonconformance", Number Col Box( 4 )] << get)[3] );
Insert Into( beforeCSList, beforeCSList[6] * 1000000 );
Insert Into( beforeCSList, . );
Insert Into( beforeCSList, (Report( Dis[1] )["Within Sigma Capability", Number Col Box( 1 )] << get)[4] );
Insert Into( beforeCSList, (Report( Dis[1] )["Within Sigma Capability", Number Col Box( 1 )] << get)[1] );
Insert Into( beforeCSList, . );
Insert Into( beforeCSList, (Report( Dis[1] )["Nonconformance", Number Col Box( 2 )] << get)[3] );
Insert Into( beforeCSList, Round( beforeCSList[13] * 1000000, 0 ) );
afterCSList = {.};
Insert Into( afterCSList, (Report( Dis[2] )["Overall Sigma Capability", Number Col Box( 1 )] << get)[4] );
Insert Into( afterCSLIST, (Report( Dis[2] )["Overall Sigma Capability", Number Col Box( 1 )] << get)[1] );
Insert Into( afterCSLIST, . );
Insert Into( afterCSLIST, (Report( Dis[2] )["Nonconformance", Number Col Box( 1 )] << get)[3] );
Insert Into( afterCSLIST, (Report( Dis[2] )["Nonconformance", Number Col Box( 3 )] << get)[3] );
Insert Into( afterCSLIST, (Report( Dis[2] )["Nonconformance", Number Col Box( 4 )] << get)[3] );
Insert Into( afterCSLIST, afterCSLIST[6] * 1000000 );
Insert Into( afterCSLIST, . );
Insert Into( afterCSLIST, (Report( Dis[2] )["Within Sigma Capability", Number Col Box( 1 )] << get)[4] );
Insert Into( afterCSLIST, (Report( Dis[2] )["Within Sigma Capability", Number Col Box( 1 )] << get)[1] );
Insert Into( afterCSLIST, . );
Insert Into( afterCSLIST, (Report( Dis[2] )["Nonconformance", Number Col Box( 2 )] << get)[3] );
Insert Into( afterCSLIST, Round( afterCSLIST[13] * 1000000, 0 ) );
change = Matrix( beforeCSList ) - Matrix( afterCSList );
obcs << append(
Table Box(
String Col Box( "",
{"Actual (overall)", " Pp", " Ppk", " Z Bench", " % Out of spec (obs)",
" % Out of spec (exp)", " PPM (DPMO) (obs)", " PPM (DPMO) (exp)", "Potential (within)",
" Cp", " Cpk", " Z Bench", " % Out of spec (exp)", " PM (DPMO) (exp)"}
),
Number Col Box( "Before", beforeCSList ),
Number Col Box( "After", afterCSList ),
Number Col Box( "Change", change )
)
);
dis << close window;