Ciao,
Sto cercando di generare una tabella di riepilogo da una tabella dati principale.
Finora sono riuscito a inserire tutte le metriche nella colonna 1 con raggruppamento (colonna 2).
Potrei quindi popolare con Conteggio, Media, Dev. standard, +4sigma, -4sigma.
Il passo successivo è aggiungere l'intervallo di confidenza (95%) per la media e la STD: nello stesso modo in cui viene fatto nell'analisi seguente:
Adatta Y per X > Media e Deviazione standard.
Potrei eseguire TUTTE le analisi una alla volta con un ciclo FOR() e usare DisplayBox per selezionare ogni valore e popolare la mia tabella dati di riepilogo, ma preferirei di no, poiché rallenterebbe MOLTO l'analisi, dato che di solito ho a che fare con più di 1000 metriche e più di 10000 righe.
Grazie in anticipo per il tuo 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 senza problemi e velocemente su un file di dati di grandi dimensioni.
Grazie mille!!
- Predicatore
suImmagino che tu voglia estrarre tutto questo 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 usare Aggiorna per aggiungere le colonne di cui hai bisogno alla tabella finale.</P>
<P> </P>
<P>Se per qualche motivo questo non funziona, il looping lo farà e ci sono poche opzioni su come farlo. Usa << Make Into Data Table and Update OPPURE ottieni i risultati dalla casella della tabella in elenchi (<< Get potrebbe essere sufficiente) e aggiorna i tuoi dati usando elenchi + indicizzazione della tabella dati.</P></LINGO-BODY><LINGO-SUB id="lingo-sub-761889" slang="en-US" mode="CREATE">Re: Popola 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, l'esecuzione dello script richiede dagli 8 ai 10 secondi, il che è fantastico perché 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 è super lento. C'è un modo per popolare un'intera matrice in una tabella in modo rapido?</P></LINGO-BODY><LINGO-SUB id="lingo-sub-761834" slang="en-US" mode="CREATE">Re: Popola 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 significhi "molto" nel tuo caso, ma proverei comunque prima a usare la piattaforma fit y by x.
Aprilo con il minimo possibile E aprilo come report invisibile (o privato a seconda della tua 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);