Hallo,
Ich versuche, aus einer Hauptdatentabelle eine Übersichtstabelle zu erstellen.
Bisher konnte ich alle Metriken mit Gruppierung (Spalte 2) in Spalte 1 einfügen.
Ich könnte dann mit Anzahl, Mittelwert, Standardabweichung, +4sigma und -4sigma auffüllen.
Der nächste Schritt besteht darin, das Konfidenzintervall (95 %) für Mittelwert und STD hinzuzufügen: auf die gleiche Weise, wie es in der folgenden Analyse gemacht wird:
Passen Sie Y an X > Mittelwert und Standardabweichung an.
Ich könnte ALLE Analysen einzeln mit einer FOR()-Schleife ausführen und DisplayBox verwenden, um alle Werte auszuwählen und meine Zusammenfassungsdatentabelle zu füllen, aber das würde ich wirklich lieber nicht tun, da dies die Analyse SEHR verlangsamen würde, da ich normalerweise mit über 1.000 Metriken und über 10.000 Zeilen arbeite.
Vielen Dank im Voraus für Ihre Hilfe
- Prediger
Anbei mein Skript, das BIG CLASS.JMP als Beispiel aufruft
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 iHallo Jarmo,
Ja, ich habe das obige Skript ausprobiert und es läuft reibungslos und schnell auf einer großen Datendatei.
Vielen Dank!!
- Prediger
Ich gehe davon aus, dass Sie alle diese für jede der Ebenen extrahieren möchten

Ich denke, das könnte sogar noch schneller gehen (zumindest ist es einfacher zu skripten)
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>Anschließend sollten Sie mit „Update“ die benötigten Spalten zu Ihrer endgültigen Tabelle hinzufügen können.</P>
<P> </P>
<P>Wenn dies aus irgendeinem Grund nicht funktioniert, wird eine Schleife ausgeführt. Dafür gibt es einige Möglichkeiten. Verwenden Sie „<< In Datentabelle umwandeln und aktualisieren“ ODER holen Sie sich die Ergebnisse aus dem Tabellenfeld in Listen (<< Abrufen reicht möglicherweise aus) und aktualisieren Sie Ihre Daten mithilfe von Listen + Datentabellen-Indizierung.</P></LINGO-BODY><LINGO-SUB id="lingo-sub-761889" slang="en-US" mode="CREATE">Betreff: Füllen Sie die Übersichtstabelle mit den Haupt- und Standardabweichungs-Konfidenzintervallen</LINGO-SUB><LINGO-BODY id="lingo-body-761889" slang="en-US" mode="CREATE"><P>Hallo Jarmo,</P><P> </P><P>Vielen Dank, die Ausführung des Skripts dauert zwischen 8 und 10 Sekunden, was großartig ist, da PROBE.JMP eine ziemlich große Datei ist.</P><P> </P><P>Kennen Sie einen Trick, um eine Übersichtstabelle mit „ <STRONG>tb_vals“</STRONG> für jede Metrik und Gruppierung zu füllen? Ich habe versucht, dies für jeden Wert einzeln zu tun, und mein Skript ist jetzt super langsam. Gibt es eine Möglichkeit, eine ganze Matrix schnell in eine Tabelle zu füllen?</P></LINGO-BODY><LINGO-SUB id="lingo-sub-761834" slang="en-US" mode="CREATE">Betreff: Füllen Sie die Übersichtstabelle mit den Haupt- und Standardabweichungs-Konfidenzintervallen</LINGO-SUB><LINGO-BODY id="lingo-body-761834" slang="en-US" mode="CREATE"><P>Meine Antwort beantwortete die Frage nicht</P>
<P> </P>
<PRE><CODE class=" language-jsl">
Ich bin nicht sicher, was in Ihrem Fall „viel“ ist, aber ich würde trotzdem zuerst versuchen, die Plattform „Fit Y by X“ zu verwenden.
Öffnen Sie es mit so wenig wie möglich UND öffnen Sie es als unsichtbaren Bericht (oder privat, abhängig von Ihrer JMP-Version). Nachdem Sie die Werte extrahiert haben, schließen Sie es.
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);