按分组变量统计所有数字列的摘要统计信息我借用了另一个人不久前写的 JSL 的一部分,但不幸的是他现在已经离开公司了。
原始 JSL 通过分组变量(“分割”)创建箱线图以及包含所有数字列的汇总统计信息的表格。
我的目标是通过分组变量仅获取包含所有数字列的汇总统计信息(平均值、标准差)的汇总表。
我正在使用 JMP16。
样本输入数据表有 200 个数字列,数千行,具有 5 个分组字符变量(“split”)的唯一值。
输出汇总表应有 200 行,其中 5 列为平均值,5 列为标准差,其中每一列(10)是每个数字列的平均值/标准差,按分组字符变量的每个唯一值(“拆分”)进行分组。
谢谢
自动化和脚本质量与工艺工程视窗回复:按分组变量汇总所有数字列的统计数据忘记发布我使用 JSL 时遇到的错误
谢谢

回复:按分组变量汇总所有数字列的统计数据代码中缺少生成方差分析的 JMP 平台的 JSL。您提供的 JSL 中变量“vv”的使用方式似乎指向单因素分析或拟合模型的输出显示。我在您提供的代码中找不到这样的引用。
我做了一个猜测,并在代码中添加了一个 Oneway。它会产生输出,但您需要验证它是否是您想要的。
Input = Dialog( "Please Set Pvalue Limit", Pvalue_Threshold = EditNumber( 0.15 ), Button( "OK" ), Button( "Cancel" ) );
Pvaluelimit = Input[1];
vl = V List Box( Text Box( "Vmap Comparison" ) );
vl1 = V List Box();
vl2 = V List Box();
counter = 0;
i = 0;
k = 0;
j = 0;
w = 0;
WorkTable= current data table();
GetColName = WorkTable << get column names( Numeric );
Show( GetColName );
SumDT = New Table( "SummaryData" );
SumDT << New Column( "MDUT_Data", Character, Nominal, width( 30 ), values( GetColName ) );
SumDT << New Column( "P-Value", Numeric, Continuous );
nc1 = 1;
Temp = Data Table( WorkTable ) << Summary( Group( SPLIT ) );
nsplits = N Row( Temp );
SplitDef = Column( 1 ) << Get As Matrix;
Show( SplitDef, nsplits );
Close( Temp, no save );
For( i = 1, i <= nsplits, i++,
MeanCol = "Mean of " || Splitdef[i];
SumDT << New Column( MeanCol );
);
For( i = 1, i <= nsplits, i++,
SigmaCol = "Sigma of " || Splitdef[i];
SumDT << New Column( SigmaCol );
);
Current Data Table( SumDT );
For Each Row(
CurrentMDUT = Column( SumDT, "MDUT_Data" )[];
Current Data Table( WorkTable );
MeanCal = Summarize(
ExpCol = by( SPLIT ),
c = count,
meanD = Mean( Eval( CurrentMDUT ) ),
Sig = Std Dev( Eval( CurrentMDUT ) )
);
Current Data Table( SumDT );
For( w = nc1 + 2, w <= nsplits + nc1 + 1, w++,
BB = meanD[w - nc1 - 1];
Column( w )[] = BB;
CC = Sig[w - nc1 - 1];
Column( w + nsplits )[] = CC;
);
Current Data Table( WorkTable );
vx=worktable << Oneway( Y( column(SumDT:MDUT_Data[row()]) ), X( :Split ), Means( 1 ), Mean Diamonds( 1 ) );
vv=report(vx);
Pvalue = vv["Analysis of Variance"][Number Col Box( 5 )] << get( 1 );
Current Data Table( SumDT );
Column( nc1 + 1 )[] = Pvalue;
Current Data Table( WorkTable );
vv << close window;
If( Pvalue < Pvaluelimit,
counter = counter + 1;
layoutflag = Mod( counter, 2 );
If( layoutflag > 0,
vl1 << append( vv ),
vl2 << append( vv )
);
);
);
回复:按分组变量汇总所有数字列的统计数据感谢您的快速回复。
新的 JSL 可以运行并提供所需的结果,但我认为它很慢。
我希望将此脚本用于非常大的数据集。
有没有什么方法可以提高性能?谢谢。
回复:按分组变量汇总所有数字列的统计数据使用“响应筛选”平台获取 p 值,脚本运行速度会更快。使用“制表”平台生成平均值和标准差也会更有效率
以下是如何使用上述建议创建摘要表的示例。我已排除 PValue 限制,因为它在原始脚本中没有任何作用。

Names Default To Here( 1 );
WorkTable = Current Data Table();
GetColName = WorkTable << get column names( Numeric );
// Generate the mean/std table
tab = WorkTable << (Tabulate(
Add Table(
Column Table( Grouping Columns( :split ), Statistics( Mean ) ),
Column Table( Grouping Columns( :split ), Statistics( Std Dev ) ),
Row Table( Analysis Columns( Eval( GetColName ) ) )
)
));
tab << Make Into Data Table;
tab << close window;
SumDT = Current Data Table();
SumDT << set name( "SummaryData" );
// Generate the p-values
rs = WorkTable << Response Screening(
Y( Eval( GetColName ) ),
X( :split ),
PValues Table on Launch( 1 )
);
ResponseDT = rs << get PValues;
Report( rs ) << close window;
ResponseDT << select columns( {"Y", "PValue"} );
ResponseDT << Invert Column Selection;
ResponseDT << delete columns;
ResponseDT:Y << set name( "Analysis Columns" );
SumDT << Update( With( ResponseDT ), Match Columns( :Analysis Columns = :Analysis Columns ) );
SumDT << Select columns( :PValue );
SumDT << Move Selected Columns( After( :Analysis Columns ) );
Close( ResponseDT, nosave );
它应该可以帮助您完成脚本以满足您的确切规格。
我建议您花点时间阅读脚本指南,该指南位于 JMP 文档库的“帮助”下拉菜单下。
回复:按分组变量汇总所有数字列的统计数据作为替代建议,您可以生成一个临时堆积表 - 并将表/摘要与选项组(原始列)和子组(拆分)结合使用:

dt = Open( "$SAMPLE_DATA/Semiconductor Capability.jmp" );
tmp = dt <<
Stack(
columns( Column Group( "Processes" ) )
);
tmp << Summary(
Group( :Label ),
Mean( :Processes ),
Std Dev( :Processes ),
Subgroup( :SITE ),
statistics column name format( "stat" )
);