Realizar fórmula en columnas de subconjuntoCreé un script para crear una tabla de subconjunto de una tabla más grande, pero no funciona correctamente. Mi objetivo es que el usuario seleccione qué columnas le gustaría en la tabla de subconjunto y luego hacer que el script ejecute una fórmula en las columnas antes de colocar los datos en la nueva tabla.Hasta ahora, mi secuencia de comandos abrirá el cuadro de diálogo para la interacción del usuario, pero cuando selecciono las columnas en el cuadro de diálogo, no son las que aparecen en la tabla de subconjunto. No estoy seguro de dónde radica mi problema con eso. (Nota: el usuario seleccionará columnas que contengan datos, en lugar de información de muestra, por lo que en el ejemplo, columnas con nombres que comiencen con "Columna 10...").
Además, no estoy seguro de dónde insertaría la fórmula. Básicamente, las columnas que el usuario selecciona en el cuadro de diálogo tendrán algunas celdas con símbolos <. Para la nueva tabla de subconjunto, me gustaría que cualquier celda sin un símbolo menor que se convierta en cero y cualquier celda con un símbolo < tenga el símbolo <. eliminado colocando solo el número al lado de él en la tabla de subconjuntos. Entonces, la nueva tabla de subconjuntos tiene ceros para los valores detectados y el límite de detección para los compuestos no detectados.
Aquí está mi guión hasta ahora.
Names Default To Here( 1 );
dt = Data Table("Example Data");
col_dlg = new window("Column Select",
panelbox("Select columns to create NonDetect table with",
col_clist = collistbox(all, width(200)),
buttonbox("Ok",
selected_column_list = col_clist << getselected;
dt2 = dt << Subset(Output Table("NonDetect"),columns(col_clist));
col_dlg << close window;
)
)
);¡Gracias por cualquier ayuda!
Re: Realizar fórmula en columnas de subconjuntoAhora es su oportunidad de pagar a los contribuyentes de la comunidad de debate... profundizar en la Guía de secuencias de comandos y en el Índice de secuencias de comandos como usuario experimentado y contribuir con su participación.
Re: Realizar fórmula en columnas de subconjunto¡Eso funciono! Muchas gracias por su tiempo y paciencia. ¡Realmente lo aprecio!
encaje
Re: Realizar fórmula en columnas de subconjuntoResulta que la función Substr() no funciona en las filas seleccionadas (no estoy seguro de por qué), así que cambié un poco el código y lo probé (obviamente no había probado mi última versión).
Names Default To Here( 1 );
dt = Data Table( "Example Data" );
col_dlg = New Window( "Column Select",
Panel Box( "Select columns to create NonDetect table with",
col_clist = Col List Box( all, width( 200 ) ),
Button Box( "Ok",
selected_column_list = col_clist << getselected;
dt2 = dt << Subset( Output Table( "NonDetect" ), columns( selected_column_list ) );
// Loop across the columns in the new data table and convert them to numeric
// Cells with nonnumeric values will be set to Missing Values, which then can
// be identified and set to 0
For( i = 1, i <= N Items( selected_column_list ), i++,
// Select all of the currently non selected columns and unselect the current ones
dt2 << select where( Contains( As Column( dt2, selected_column_list[i] ), "<" ) == 0 );
// Set for the target column all of the currently selected rows to "0"
Column( dt2, selected_column_list[i] )[dt2 << get selected rows] = "0";
// Find the rows with the "<" in them
dt2 << invert row selection;
selRows = dt2 << get selected rows;
//selRows= dt2 << Get Rows Where(Contains(As Column( dt2, selected_column_list[i] ),"<" )==1);
// Get rid of the "<" making the value a valid numeric value
For( k = 1, k <= N Rows( selRows ), k++,
Column( dt2, selected_column_list[i] )[selRows[k]] = Substr( As Column( dt2, selected_column_list[i] )[selRows[k]], 2 )
);
// Convert the column to a numeric/continuous column
Column( dt2, selected_column_list[i] ) << data type( numeric ) << modeling type( continuous );
);
col_dlg << close window;
)
)
);Re: Realizar fórmula en columnas de subconjunto¿Quizás puse el ( está en el lugar equivocado? Esto es lo que tengo ahora.
Names Default To Here( 1 );
dt = Data Table( "Example Data" );
col_dlg = New Window( "Column Select",
Panel Box( "Select columns to create NonDetect table with",
col_clist = Col List Box( all, width( 200 ) ),
Button Box( "Ok",
selected_column_list = col_clist << getselected;
dt2 = dt << Subset( Output Table( "NonDetect" ), columns( selected_column_list ) );
// Loop across the columns in the new data table and convert them to numeric
// Cells with nonnumeric values will be set to Missing Values, which then can
// be identified and set to 0
For( i = 1, i <= N Items( selected_column_list ), i++,
// Select the rows where there is a "<" for the target column
dt2 << Select where(Contains(As Column( dt2, selected_column_list[i] ),"<" )==1);
// Get rid of the "<" making the value a valid numeric value
Column( dt2, selected_column_list[i] )[dt2 << get selected rows ()] =
substr(As Column( dt2, selected_column_list[i] ),2);
// Select all of the currently non selected columns and unselect the current ones
dt2 << invert row selection;
// Set for the target column all of the currently selected rows to "0"
Column( dt2, selected_column_list[i] )[dt2 << get selected rows ()] = "0";
// Convert the column to a numeric/continuous column
Column( dt2, selected_column_list[i] ) << data type( numeric ) <<
modeling type( continuous );
);
col_dlg << close window;
)
)
);Re: Realizar fórmula en columnas de subconjunto¡Gracias por su rápida respuesta! Probé 2 pero termino con ceros de los valores detectados y espacios en blanco para cualquier celda con símbolos <. Mismo resultado que obtengo con 1.
Re: Realizar fórmula en columnas de subconjuntoVaya... mi error, cambie el "1" en la función substr() a un "2" y eso debería solucionarlo.
Re: Realizar fórmula en columnas de subconjuntoEl segundo código que enviaste para la segunda tabla no parece funcionar. He pasado algunas horas probando cosas diferentes. Noté que faltaban dos (. Eso ayudó a que el código se ejecutara sin errores; sin embargo, la parte del código que elimina el símbolo "<" no parece funcionar correctamente. Si elimino ese fragmento de código, la tabla termina con los valores detectados como 0 y los valores ND aún intactos, con el símbolo <. Intenté jugar con él pero aún no lo he descubierto. ¿Alguna pista? 
¡Gracias!
Re: Realizar fórmula en columnas de subconjuntoAquí está el código para manejar su segundo caso.
Names Default To Here( 1 );
dt = Data Table( "Example Data" );
col_dlg = New Window( "Column Select",
Panel Box( "Select columns to create NonDetect table with",
col_clist = Col List Box( all, width( 200 ) ),
Button Box( "Ok",
selected_column_list = col_clist << getselected;
dt2 = dt << Subset( Output Table( "NonDetect" ), columns( selected_column_list ) );
// Loop across the columns in the new data table and convert them to numeric
// Cells with nonnumeric values will be set to Missing Values, which then can
// be identified and set to 0
For( i = 1, i <= N Items( selected_column_list ), i++,
// Select the rows where there is a "<" for the target column
dt2 << Select where(Contains(As Column( dt2, selected_column_list[i] ),"<" )==1);
// Get rid of the "<" making the value a valid numeric value
Column( dt2, selected_column_list[i] )[dt2 << get selected rows )] =
substr(As Column( dt2, selected_column_list[i] ),1);
// Select all of the currently non selected columns and unselect the current ones
dt2 << invert row selection;
// Set for the target column all of the currently selected rows to "0"
Column( dt2, selected_column_list[i] )[dt2 << get selected rows )] = "0";
// Convert the column to a numeric/continuous column
Column( dt2, selected_column_list[i] ) << data type( numeric ) <<
modeling type( continuous );
);
col_dlg << close window;
)
)
);Re: Realizar fórmula en columnas de subconjuntoEso funciona muy bien para la tabla Detectar, por lo que para mi segunda tabla me gustaría cambiar los valores que pasan a cero, por lo que no creo que este enfoque funcione. Me gustaría conservar las celdas que tienen el símbolo < y poner el resto de las celdas a cero. Entonces me gustaría eliminar el símbolo < dejando solo valores numéricos. En mi cabeza, me imagino que haría el bucle tal como lo tienes y luego agregaría una declaración if/else.
Y gracias por publicar la declaración if/else. ¡Mi problema era no tener el num() antes del nombre de mi columna para el resto!
Re: Realizar fórmula en columnas de subconjuntoAquí hay un cambio en el guión que creo que podrías considerar como un buen enfoque.Lo que interpreto como lo que desea hacer es crear una columna numérica que contenga los valores de las columnas de caracteres que seleccione, pero si los valores contienen un símbolo "<", convierta esas entradas en cero (0).El siguiente script hace eso, sin crear nuevas columnas.Convierte las columnas a numéricas y establece las celdas "<" en cero.
Names Default To Here( 1 );
dt = Data Table( "Example Data" );
col_dlg = New Window( "Column Select",
Panel Box( "Select columns to create NonDetect table with",
col_clist = Col List Box( all, width( 200 ) ),
Button Box( "Ok",
selected_column_list = col_clist << getselected;
dt2 = dt << Subset( Output Table( "NonDetect" ), columns( selected_column_list ) );
// Loop across the columns in the new data table and convert them to numeric
// Cells with nonnumeric values will be set to Missing Values, which then can
// be identified and set to 0
For( i = 1, i <= N Items( selected_column_list ), i++,
// Change the column to numeric/continuous
// The names in the data table are very complex, containing symbols, etc.
// that JMP will confuse as operators. Therefore, using the Column()
// function, or a :Name(" ") function to wrap around the column name
// needs to be used
Column( dt2, selected_column_list[i] ) << data type( numeric ) <<
modeling type( continuous );
// Now find all of the rows in the table that have Missing Values
// in the target column, and then set them all to "0" in one
// statement
Column( dt2, selected_column_list[i] )[dt << get rows where(
Is Missing( As Column( dt2, selected_column_list[i] ) )
)] = 0;
);
col_dlg << close window;
)
)
);
Podrías crear nuevas columnas y establecer una fórmula como indicaste en tu última respuesta.El problema que tiene con lo que proporcionó es lidiar con los nombres complejos de las columnas. Así es como funcionaría
If( Contains( :Name( "Column 10 1,2,3,4,6,7,8-HpCDD" ), "<" ),
0,
Num( :Name( "Column 10 1,2,3,4,6,7,8-HpCDD" ) )
)
Re: Realizar fórmula en columnas de subconjuntoCreo que ahí es donde tengo mi problema, soy muy competente en Excel y he estado haciendo todos mis análisis de datos en él durante 9 años. Sólo estoy tratando de realizar la transferencia y tengo dificultades con mis declaraciones si/entonces en jmp (entre otras cosas). Lo escribiré en términos de Excel y ¿quizás puedas ayudarme?
Haré dos de estos subconjuntos de tablas. Uno para los valores detectados y otro para los valores no detectados. Para los valores detectados, haría una declaración si/entonces como =if(isnumber(J2),J2,0). Para los valores no detectados, haría algo como =if(isnumber(J2),0,J2).
Estaba intentando cambiarlo en JMP para que fuera
Si ( Contiene (: Columna 10 1,2,3,4,6,7,8-HpCDD , "<" ), 0 ,:Columna 10 1,2,3,4,6,7,8-HpCDD )
pero no parece funcionar incluso si yo mismo creo una columna e inserto la fórmula.
Básicamente, en mi script incluiré dos partes, una para la tabla NonDetect y otra para la tabla Detect y me gustaría que las columnas se transformen como tales, usando la declaración if then. Al final, enviaré las dos tablas de datos a R para imputar los valores no detectados utilizando los DL restantes en el subconjunto NonDetect. ¿Espero que esto lo explique?
Re: Realizar fórmula en columnas de subconjunto¿Cuál es la fórmula que quieres calcular?¿Realmente requiere la creación de una nueva columna?Recuerde, esto no es Excel.Para generar valores o resultados, no es necesario colocarlos en columnas... existen otras estructuras.¿Puedes describir con más detalle lo que estás buscando hacer?
Re: Realizar fórmula en columnas de subconjuntoAh, eso funciona.
¿Hay alguna manera de completar una fórmula con los datos antes de colocarlos en la nueva tabla? De lo contrario, pensé en crear nuevas columnas en la tabla del subconjunto, completar el cálculo en las nuevas columnas y luego eliminar las columnas originales (usando un script). ¿Existe una forma más eficiente de hacer esto?
¡Gracias!
Re: Realizar fórmula en columnas de subconjuntoEstaba haciendo referencia al objeto de visualización, col_clist, en lugar de a su contenido, que había colocado en Selected_column_list.
Names Default To Here( 1 );
dt = Data Table( "Example Data" );
col_dlg = New Window( "Column Select",
Panel Box( "Select columns to create NonDetect table with",
col_clist = Col List Box( all, width( 200 ) ),
Button Box( "Ok",
selected_column_list = col_clist << getselected;
dt2 = dt << Subset( Output Table( "NonDetect" ), columns( selected_column_list ) );
col_dlg << close window;
)
)
);