Hola,
Estoy intentando generar una tabla 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 completarlo con recuento, media, desviación estándar, +4 sigma, -4 sigma.
El siguiente paso es agregar el intervalo de confianza (95%) para la media y la desviación estándar: de la misma manera que se hace en el siguiente análisis:
Ajuste Y por X > Media y Desv. Est.
Podría ejecutar TODO el 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, ya que ralentizaría MUCHO el análisis ya que generalmente trato con más de 1000 métricas y más de 10000 filas.
Gracias de antemano por su ayuda
- Predicador
Adjunto mi script que llama a 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ápido 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 programar)
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ías poder usar Actualizar para agregar las columnas que necesitas a tu tabla final.</P>
<P> </P>
<P>Si esto no funciona por alguna razón, se ejecutará un bucle y existen algunas opciones para hacerlo. Use << Convertir en tabla de datos y actualizar O bien obtenga los resultados del cuadro de 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: Completar la tabla de resumen con intervalos de confianza de desviación estándar y principal</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>¿Tienes algún truco para rellenar 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 ahora mi script es muy lento. ¿Hay alguna forma de rellenar 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: Completar la tabla de resumen con intervalos de confianza de desviación estándar y principal</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í primero intentaría usar la plataforma fit y by x.
Ábralo con la menor cantidad de datos posible Y ábralo como informe invisible (o privado, según la versión de JMP). Después de haber 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);