Cómo establecer una fórmula en muchas columnas de una manera elegante<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hola tios,
¿Alguien puede ayudarme con la siguiente pregunta?
Me gustaría evitar la fórmula larga como se muestra a continuación: (¡cada elemento es un nombre de columna!)
Column("Std")<
Fórmula(
Desv estándar(
:F23 m A,:F23 m C,:F23 m H,:F23 MA,:F23 MC,:F23 MH,:F23 NA,:F23 NC,:F23 NH,
:F30 m A,:F30 m C,:F30 m H,:F30 MA,:F30 MC,:F30 MH,:F30 NA,:F30 NC,:F30 NH,
:F36 m A,:F36 m C,:F36 m H,:F36 MA,:F36 MC,:F36 MH,:F36 NA,:F36 NC,:F36 NH,
:F37 m A,:F37 m C,:F37 m H,:F37 MA,:F37 MC,:F37 MH,:F37 NA,:F37 NC, :F37 NH,
:F49 m A,:F49 m C,:F49 m H,:F49 MA,:F49 MC,:F49 MH,:F49 NA,:F49 NC, :F49 NH,
:F53 m A,:F53 m C,:F53 m H,:F53 MA,:F53 MC,:F53 MH,:F53 NA,:F53 NC, :F53 NH,
:F87 m A,:F87 m C,:F87 m H,:F87 MA,:F87 MC,:F87 MH,:F87 NA,:F87 NC, :F87 NH ) ) );
Salud,
Dan
Re: Como poner una fórmula en muchas columnas de forma eleganteAmbas soluciones anteriores funcionarán, pero tenga en cuenta que para la solución de Ron, la fórmula puede funcionar solo hasta que la variable global colnames se redefine o borra, por ejemplo, cuando se cierra la sesión JMP.
Aquí hay un código que compara los dos enfoques:
dt = Abierto ( "$SAMPLE_DATA/Clase grande.jmp" ) ;
colnames = dt << obtener nombres de columna ;
// Enfoque de Ron: Variables en la fórmula no evaluadas
dt << Nueva columna ( "Estándar" , Fórmula ( Desv estándar ( colnames [ 4 :: 5 ]))) ;
// Enfoque de Ian: Variables evaluadas antes de establecer la fórmula
fórmula = Expr evaluación ( Desv estándar ( exp. ( colnames [ 4 :: 5 ]))) ;
dt << Nueva columna ( "Std2" , Fórmula ( Nombre Expr. ( Fórmula ))) ;
// Compara fórmulas en el registro
Impresión ( : estándar << obtener fórmula , estándar2 << obtener fórmula ) ;
//Borrar definiciones de variables y agregar filas. Solo Std2 reconocerá los cambios
Borrar Globales () ;
Tabla de datos actual () << concatenar (
Abierto ( "$SAMPLE_DATA/Estudiantes2.jmp" ) ,
añadir a la primera tabla
) ;
Re: Como poner una fórmula en muchas columnas de forma elegantehola húmedo77 ,
Ian@JMP La solución de es correcta. Sin embargo, si está buscando algo menos riguroso, puede probar lo siguiente.
suponiendo que las columnas que necesita para la fórmula están todas juntas en un rango, puede introducir el número de la primera y la última de la siguiente manera:
dt = Abierto ( "$SAMPLE_DATA/Clase grande.jmp" ) ;
colnames = dt << obtener nombres de columna ;
columna = dt << nueva columna ( "Estándar" ) ;
columna << Establecer fórmula ( desarrollo estándar ( colnames [ 4 :: 5 ] )) ;
mejor,
Ron
Re: Como poner una fórmula en muchas columnas de forma eleganteEste código 'evita' en el sentido de que usa las columnas seleccionadas actualmente para que no tenga que escribir. ¿Es eso lo que buscas, por favor?
Haga 'Archivo> Nuevo> Nuevo script', corte y pegue el JSL, luego haga 'Editar> Ejecutar script'.
Nombres predeterminados a aquí ( 1 ) ;
// Hacer una mesa
Carolina del Norte = 30 ;
dt = NuevaTabla ( "Prueba" ) ;
por ( C = 1 , C <= Carolina del Norte , C ++,
dt << NuevaColumna ( "Columna" || Carbonizarse ( C ) , Numérico , Continuo , Fórmula ( AleatorioNormal ())) ;
) ;
dt << Agregar filas ( 100 ) ;
// Selecciona la mitad de las columnas
norte = Redondo ( Carolina del Norte / 2 ) ;
C = Índice aleatorio ( NCol ( dt ) , norte ) ;
por ( i = 1 , i <= norte , i ++,
Columna ( dt , C [ i ]) << conjuntoSeleccionado ( 1 ) ;
) ;
// Ejecute este código para crear una nueva columna de fórmula para la desviación estándar de las columnas actualmente seleccionadas en una tabla
selCols = dt << getSelectedColumns ;
añadirCol = exp. ( dt << NuevaColumna ( "DesvEstándar" , Numérico , Continuo , Fórmula ( Desv.estándar ( colsTBD )))) ;
Sustituir en ( añadirCol , exp. ( colsTBD ) , evaluar ( selCols )) ;
añadirCol ;