こんにちは、
メイン データ テーブルから概要テーブルを生成しようとしています。
これまでのところ、グループ化 (列 2) を使用してすべてのメトリックを列 1 に配置することができました。
次に、Count、Mean、StdDev、+4sigma、-4sigma を入力できます。
次のステップは、平均と標準偏差の信頼区間 (95%) を追加することです。これは、次の分析と同じ方法で行います。
Y を X で適合 > 平均と標準偏差
FOR() ループを使用してすべての分析を 1 つずつ実行し、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>何らかの理由でこれが機能しない場合は、ループを使用すると機能し、ループを実行する方法はいくつかあります。<< Make Into Data Table and Update を使用するか、テーブル ボックスからリストに結果を取得し (<< Get で十分な場合があります)、リストとデータ テーブルの添え字を使用してデータを更新します。</P></LINGO-BODY><LINGO-SUB id="lingo-sub-761889" slang="en-US" mode="CREATE">Re: 主要信頼区間と標準偏差信頼区間をサマリー テーブルに入力する</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">Re: 主要信頼区間と標準偏差信頼区間をサマリー テーブルに入力する</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);