Generar el mismo resultado para todos los niveles de una variable categóricaHola,
Tengo un script que realiza cálculos, ejecuta ciertas plataformas y extrae información, para luego crear una pestaña en una nueva ventana. Quiero repetir este proceso para cada nivel de una variable categórica que el usuario especifique en el cuadro de diálogo.
Actualmente creo subconjuntos individuales de los datos en función de mi variable de agrupación, y luego recorro cada uno de esos conjuntos de datos:
dtSubset = dt << Subset( By( Eval( groupVar ) ), Linked, Selected Columns Only( 0 ), All Rows( 1 ), Invisible );
For( i = 1, i <= N Items( unique_groups ), i++,
dt_i = dtSubset[i];
...some code to do stuff
<BR />...append output as a new tab box in my window
);
Essentially all I am doing is coding up my own analysis and wanting a 'By' variable. I am wondering if there is a better or more efficient way to go about this? The main thing I want with the code is to have the output I create be specific for each level, while also still maintaining a connection to the original data table (meaning the plots in my output are interactive still).
Como puedes ver, creo los subconjuntos como invisibles y luego, dentro de mi código, los cierro al final de cada iteración del bucle.
Gracias,
Roberto
Automatización y scriptingRe: Generar el mismo resultado para todos los niveles de una variable categórica¿Existe alguna razón para no utilizar la variable By dentro de las plataformas?
Re: Generar el mismo resultado para todos los niveles de una variable categóricaAquí tienes tres opciones para crear un cuadro de pestañas a partir de una tabla de datos usando una columna de agrupación. Si tienes JMP18 o superior (creo), la última es sin duda la más sencilla.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// Using subsets
dt_subsets = dt << Subset(
By(:age),
Linked,
Selected Columns Only(0),
All Rows(1),
Invisible
);
nw = New Window("Subsets",
tb = tab box()
);
dists = {};
For Each({dt_subset}, dt_subsets,
tb << Insert(Tab Page Box(Title(dt_subset << get name),
dt_subset << Distribution(
Continuous Distribution(Column(:weight)),
Nominal Distribution(Column(:age))
);
));
);
tb << Set Selected(1);
// Using Where in platform
nw = New Window("Where",
tb = tab box()
);
groups = Associative Array(Column(dt, "age")) << get keys;
dists = {};
For Each({group}, groups,
tb << Insert(Tab Page Box(Title("age=" || Char(group)),
dist = dt << Distribution(
Continuous Distribution(Column(:weight)),
Nominal Distribution(Column(:age)),
Where(:age == group)
);
));
(Report(dist) << Top Parent)[TextBox(1)] << Visibility("Collapse"); // to hide Where(... textbox
);
tb << Set Selected(1);
// Using By in platform
dist = dt << Distribution(
Group Options(Layout("Arrange in Tabs")),
Continuous Distribution(Column(:weight)),
Nominal Distribution(Column(:age)),
By(:age)
);
Re: Generar el mismo resultado para todos los niveles de una variable categóricaAmpliando el ejemplo "Por grupo" de Jarmo, aquí hay uno que crea la ventana de pestañas que tiene su salida.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// Using By in platform
dist = dt << Distribution(Invisible,
Group Options(Layout("Arrange in Tabs")),
Continuous Distribution(Column(:weight)),
Nominal Distribution(Column(:age)),
By(:age)
);
// Create a new window and add tabs for each age
nw = New Window( "Tabs",
tabb = Tab Box();
);
For( i = 1, i <= N Items( dist ), i++,
display = Report( dist[i] );
theByGroup = display[Outline Box( 1 )] << get title;
tabb << append( Tab Page Box( Title( theByGroup ), display ) );
);

Re: Generar el mismo resultado para todos los niveles de una variable categóricaLa razón principal es que me resultó más sencillo recorrer los distintos niveles de mi variable y construir cada ventana de pestañas de esa manera, para luego añadirlas. Esto se debe a que, para cada nivel, realizo cálculos para tablas, creo un gráfico con el generador de gráficos, extraigo gráficos QQ de la plataforma Dist, extraigo el gráfico de residuos estudentizados de la plataforma de ajuste del modelo, etc.
Re: Generar el mismo resultado para todos los niveles de una variable categóricaGracias a ambos por sus aportaciones; el código que me proporcionaron funciona correctamente. Cabe mencionar que estoy desarrollando un complemento bastante complejo que extrae datos de diversas plataformas y genera también resultados novedosos. Lo que realmente quería era asegurarme de que mis gráficos y tablas, que normalmente están vinculados a mi tabla de datos, permanecieran así. Además, quería que todas las pestañas tuvieran el mismo aspecto, por lo que usar un bucle me pareció una solución sencilla.
¿Crees que la mejor manera de hacerlo es simplemente usar la opción "By" en todas las plataformas que estoy usando y luego recorrer los niveles de mi variable llamando a cada componente usando las diferentes rutas y añadiéndolos donde los necesito?
Re: Generar el mismo resultado para todos los niveles de una variable categóricaSi los agregas como demostró Jim, perderán la interactividad. Tanto Subset como Where funcionan bien, pero hay casos en los que Where no resulta tan sencillo, como al crear tablas resumen (ya que utiliza un filtro de datos local en lugar de un simple Where). Además, con subconjuntos puedes acabar con muchas tablas de datos que tendrás que gestionar, ya que podrían no cerrarse como esperas (al cerrar la tabla principal). En ocasiones, también conviene considerar el uso de un filtro de datos local, ya que puedes usar un solo filtro para varias plataformas con el cuadro de contexto de filtro de datos.