Tengo un conjunto de datos con muchas columnas continuas de datos y dos factores categóricos que filtro dentro de mi tablero, y una variable categórica adicional (Grupo) que uso para dividir todos los gráficos / análisis. También tengo un conmutador de columna principal que significa que los usuarios pueden recorrer una tabla de resumen de cada variable continua. El conmutador de columnas principal está vinculado a todos los demás conmutadores de columnas en los gráficos y análisis dentro del tablero. Por lo tanto, cualquier gráfico y análisis muestra una variable continua a la vez y se puede filtrar por sexo (hombres / mujeres o ambos).
Todo esto funciona bien, pero el problema surge cuando creo una nueva tabla (dtSumm) que usa la tabla de estadísticas de resumen para cada variable continua y calcula una nueva variable (Cambio relativo). Esta nueva tabla de resumen solo tiene tantas filas como categorías de grupos haya, y no tiene Sexo, por lo que ahora perdemos la capacidad de filtrar por esto.
El código de dtSumm es el siguiente:
// Create a separate datatable for treatment group means
dtSumm = dt << Summary (
Group (:Group,:Sex ),
Mean ( eval ( cols ) ),
statistics column name format( "column" ),
Link to original data table( 1 ),
invisible
);
// Add RC columns for each column in cols to dtSumm
//This works by getting the mean of each column for treatment group "A"
For( i = 1, i <= num, i++,
mean0 = Mean(Column(cols[i])[(dtSumm << get rows where( :"Group" == "A"))]);
dtSumm << New Column(
Char(cols[i]||"_RC"),
Formula( ( ( ( column( cols[i] )[]) - ( eval(mean0) ) ) / ( eval(mean0) ) ) * 100 )
);
);
Cualquier sugerencia bienvenida. Gracias
Podría ser útil agregar un ejemplo para demostrar la pregunta. (Ver JSL a continuación)
El ejemplo utiliza los datos de AdverseR de los datos de muestra de JMP. El objetivo es producir un tablero como este:

Puede ver que hay un filtro de datos en SEXO. Y hay un conmutador de columnas que cambia la variable "respuesta" que se resume en los dos informes tabulados y la distribución.
El primer tabulado (izquierda) da la respuesta media para cada grupo de tratamiento.
El segundo tabulado (derecha) da el cambio porcentual medio en la respuesta para cada grupo de tratamiento en relación con el grupo de PBO. Esto se basa en una tabla de resumen ("dtSumm") de las medias de cada respuesta para cada grupo de tratamiento.
El problema es que el filtro de datos funciona en todo, excepto en este segundo informe tabulado. Lo ideal sería que dtSumm pudiera resumir solo los datos que cumplen con los criterios del archivador de datos. Y dtSumm se volvería a crear cuando cambien las selecciones en el Filtro de datos.
¿Es eso posible?
// Open the data table
dt = Open( "$SAMPLE_DATA/AdverseR.jmp" );
//Define cols as the list of columns for column switcher to use
//This is essentially hard-coding the columns that will be used in the dashboard
//Edit the items in this list to change the columns used in the dashboard
cols = {"DAY ON DRUG", "AGE", "WEIGHT", "ADR DURATION"};
//Define num as the number of columns in the list, cols
num = length(cols);
// We create a separate data table for treatment group means
// Get table, dtSumm, of means by group for each column in cols
dtSumm = dt << Summary (
Group (:Name("TREATMENT GROUP")),
Mean ( eval( cols ) ),
statistics column name format( "column" ),
Link to original data table( 1 ),
invisible
);
// Add RC columns for each column in cols to dtSumm
//This works by getting the mean for "PBO" treatment group for each
For( i = 1, i <= num, i++,
mean0 = Mean(Column(cols[i])[(dtSumm << get rows where( :"TREATMENT GROUP" == "PBO"))]);
dtSumm << New Column(
Char(cols[i]||"_RC"),
Formula( ( ( ( column( cols[i] )[]) - ( eval(mean0) ) ) / ( eval(mean0) ) ) * 100 )
);
);
// Create dashboard with tables and Distribution plot
mainWindow=New Window( "Example",
H List Box(
dt << Current Data Table() << Data Filter(
Location( {55, 48} ),
Mode( Select( 0 ), Show( 1 ), Include( 1 ) ),
Add Filter( columns( :SEX ) ) //
);
,
table1= dt << Tabulate(
Show Control Panel( 0 ),
Add Table(
Column Table(
Analysis Columns(
Column( cols[1] )
),
Statistics( Mean, N )
),
Row Table( Grouping Columns( :TREATMENT GROUP ) )
)
);
,
table2= dtSumm << Tabulate(
Change Item Label( Statistics( Mean, "%Rel Change" ) ),//Changes heading from "Mean"
Show Control Panel( 0 ),
Add Table(
Column Table( Analysis Columns( Char(cols[1]||"_RC") ), Statistics( Mean ) ),
Row Table( Grouping Columns( :TREATMENT GROUP ) )
)
);
,
dist0 = dt << Distribution(
Continuous Distribution(
Column( cols[1] ), //dt_c_col[1] uses first in column list
Always use column properties( 1 ),
Process Capability( 0 )
),
Histograms Only,
SendToReport(
Dispatch( {}, "Distribution", OutlineBox ),
Dispatch( {}, "Process 1", OutlineBox, {Close( 1 )} )
)
)
)
);
// Add a column switcher to table1
cs = table1 << Column Switcher(
cols[1],
cols
);
// Link column switchers at each platform - JMP 15 solution
cs1 = table2 << Column Switcher(
Char(cols[1]||"_RC"),
eval list(dtSumm << Get Column Names( String ))[(num+3)::(num+2+num)],
Close Outline( 1 )
);
cs2 = dist0 << Column Switcher(
cols[1],
cols,
Close Outline( 1 )
);
mainWindow[ListBoxBox( 1 )] << Set Script(
var = mainWindow[ListBoxBox( 1 )] << Get Selected;
cs1 << Set Current(Char(var[1]||"_RC"));
cs2 << Set Current(var[1]);
);