你好,
我正在嘗試從主資料表生成匯總表。
到目前為止,我已經能夠將所有指標放入第 1 列並進行分組(第 2 列)。
然後我可以填入計數、平均值、標準差、+4sigma、-4sigma。
下一步是新增平均值和 STD 的置信區間 (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>然後,您應該能夠使用更新將所需的列新增到最終表中。</P>
<P> </P>
<P>如果由於某種原因這不起作用,循環就會起作用,並且幾乎沒有任何選擇可以做到這一點。使用 << 產生資料表並更新,或將錶框中的結果放入清單中(<< Get 可能就足夠了),並使用清單 + 資料表下標更新資料。</P></LINGO-BODY><LINGO-SUB id="lingo-sub-761889" slang="en-US" mode="CREATE">回覆:使用 Main 和 StdDev 信賴區間填充總表</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">回覆:使用 Main 和 StdDev 信賴區間填充總表</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);