Hola,
Estoy intentando generar una tabla de resumen a partir de una tabla de datos principal.
Hasta ahora pude poner todas las métricas en la Columna 1 con agrupación (columna 2).
Luego podría completar con Count, Mean, StdDev, +4sigma, -4sigma.
El siguiente paso es sumar el intervalo de confianza (95%) para la Media y el STD: de la misma manera que se hace en el siguiente análisis:
Ajustar Y por X > Medias y Desv. Estándar.
Podría ejecutar TODOS los análisis uno por uno con un bucle FOR() y usar DisplayBox para seleccionar cada valor y completar mi tabla de datos de resumen, pero realmente preferiría no hacerlo, ralentizaría MUCHO el análisis ya que normalmente lidiar con más de 1000 métricas y más de 10000 filas.
Gracias de antemano por tu ayuda
- Predicador
Adjunto mi script que llama BIG CLASS.JMP como ejemplo
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 iHola jarmo,
Sí, probé el script anterior y se ejecuta sin problemas y rápidamente en un archivo de datos grande.
¡¡Muchas gracias!!
- Predicador
Supongo que desea extraer todos estos para cada uno de los niveles.

Creo que esto podría ser incluso más rápido (al menos es más fácil de escribir)
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>Luego debería poder usar Actualizar para agregar las columnas que necesita a su tabla final.</P>
<P> </P>
<P>Si esto no funciona por alguna razón, el bucle lo hará y hay pocas opciones para hacerlo. Utilice << Convertir en tabla de datos y actualizar O obtenga los resultados del cuadro de la tabla en listas (<< Obtener podría ser suficiente) y actualice sus datos usando listas + subíndices de tabla de datos.</P></LINGO-BODY><LINGO-SUB id="lingo-sub-761889" slang="en-US" mode="CREATE">Re: Rellenar tabla resumen con intervalos de confianza Main y StdDev</LINGO-SUB><LINGO-BODY id="lingo-body-761889" slang="en-US" mode="CREATE"><P>Hola Jarmo,</P><P> </P><P>Muchas gracias, el script tarda entre 8 y 10 segundos en ejecutarse, lo cual es genial ya que PROBE.JMP es un archivo bastante pesado.</P><P> </P><P>¿Tiene algún truco para completar una tabla de resumen con " <STRONG>tb_vals"</STRONG> para cada métrica y agrupación? Intenté hacerlo con cada valor a la vez y mi script ahora es muy lento. ¿Existe alguna forma de completar una matriz completa en una tabla de forma rápida?</P></LINGO-BODY><LINGO-SUB id="lingo-sub-761834" slang="en-US" mode="CREATE">Re: Rellenar tabla resumen con intervalos de confianza Main y StdDev</LINGO-SUB><LINGO-BODY id="lingo-body-761834" slang="en-US" mode="CREATE"><P>Mi respuesta no respondió la pregunta.</P>
<P> </P>
<PRE><CODE class=" language-jsl">
No estoy seguro de qué es "mucho" en su caso, pero aún así intentaría usar primero la plataforma fit y by x.
Ábralo con la menor cantidad posible Y ábralo como informe invisible (o privado según su versión de jmp). Una vez que haya extraído los valores, ciérrelo.
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);