Ciao,
Sto cercando di generare una tabella di riepilogo da un datatable principale.
Finora sono riuscito a inserire tutte le metriche nella colonna 1 con raggruppamento (colonna 2).
Potrei quindi popolare con Count, Mean, StdDev, +4sigma, -4sigma.
Il passo successivo è aggiungere l'intervallo di confidenza (95%) per Media e STD: nello stesso modo in cui viene fatto nella seguente analisi:
Stima Y per X > Medie e Dev.std.
Potrei eseguire TUTTE le analisi una per una con un ciclo FOR() e utilizzare DisplayBox per selezionare ciascun valore e popolare la mia tabella dei dati di riepilogo, ma preferirei davvero non farlo, rallenterebbe MOLTO l'analisi poiché di solito gestire oltre 1000 metriche e oltre 10000 righe.
Grazie in anticipo per il vostro aiuto
- Predicatore
In allegato il mio script che richiama BIG CLASS.JMP come esempio
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 iCiao Jarmo,
Sì, ho provato lo script sopra e funziona in modo fluido e veloce su un file di dati di grandi dimensioni.
Grazie mille!!
- Predicatore
su Presumo che tu voglia estrarli tutti per ciascuno dei livelli

Penso che potrebbe essere ancora più veloce (almeno è più facile da scrivere)
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>Dovresti quindi essere in grado di utilizzare Aggiorna per aggiungere le colonne di cui hai bisogno al tuo tavolo finale.</P>
<P> </P>
<P>Se per qualche motivo questo non funziona, il loop lo farà e ci sono poche opzioni su come farlo. Utilizza << Trasforma in tabella dati e aggiorna OPPURE ottieni i risultati dalla casella della tabella in elenchi (<< Ottieni potrebbe essere sufficiente) e aggiorna i tuoi dati utilizzando elenchi + abbonamento alla tabella dati.</P></LINGO-BODY><LINGO-SUB id="lingo-sub-761889" slang="en-US" mode="CREATE">Ri: Compilare la tabella di riepilogo con gli intervalli di confidenza Main e StdDev</LINGO-SUB><LINGO-BODY id="lingo-body-761889" slang="en-US" mode="CREATE"><P>Ciao Jarmo,</P><P> </P><P>Grazie mille, ci vogliono dagli 8 ai 10 secondi per l'esecuzione dello script, il che è fantastico dato che PROBE.JMP è un file piuttosto pesante.</P><P> </P><P>Hai un trucco per popolare una tabella di riepilogo con " <STRONG>tb_vals"</STRONG> per ogni metrica e raggruppamento? Ho provato a farlo ogni valore alla volta e il mio script ora è molto lento. C'è un modo per popolare un'intera matrice in una tabella in modo veloce?</P></LINGO-BODY><LINGO-SUB id="lingo-sub-761834" slang="en-US" mode="CREATE">Ri: Compilare la tabella di riepilogo con gli intervalli di confidenza Main e StdDev</LINGO-SUB><LINGO-BODY id="lingo-body-761834" slang="en-US" mode="CREATE"><P>La mia risposta non ha risposto alla domanda</P>
<P> </P>
<PRE><CODE class=" language-jsl">
Non sono sicuro di cosa sia "molto" nel tuo caso, ma proverei comunque prima a utilizzare la piattaforma fit y by x.
Aprilo con il meno possibile E aprilo come report invisibile (o privato a seconda della versione di jmp). Dopo aver estratto i valori, chiudilo.
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);