透過分組變數對所有數值列進行總計統計我借用了不久前有人寫的另一篇JSL的一段內容,但不幸的是現在已經離開公司了。
原始 JSL 透過將變數分組(「拆分」)來建立箱線圖以及包含所有數字列的總計統計資料的表格。
我的目標是透過對變數進行分組來僅獲取所有數字列的總計統計資料(平均值,標準差)的總計表。
我正在使用 JMP16。
範例輸入資料表有 200 個數字列、數千行,具有 5 個唯一的分組字元變數值(「拆分」)。
輸出總表應有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" )
);