usando nombres de columna en bucles<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Estimados expertos de JMP,
Tengo una tabla con muchas columnas repetitivas:
A_X1_Y1, A_X1_Y2, ....A_X1_Y99, A_X2_Y1, A_X2_Y99, ...
B_X1_Y1, B_X1_Y2, ....B_X1_Y99, B_X2_Y1, B_X2_Y99, ...
es decir, Xi, i=1, 99, Yj, j=1,20,
Si quiero agregar varias columnas:
C_Xi_Yj = A_Xi_Yj - B_Xi_Yj
C_?, donde C_? = A_? - B_?
¿Puedo usar loop con Xi, Yj, o puedo usar algo aún más abstracto, como: C_? = A_?-B_?
Gracias,
Qian
Re: usar nombres de columnas en buclesMe toma un tiempo entender esto. Es una idea genial.
¡Gracias!
-------------------------------------------------- -------------------------------------------------- ------------------------------------
Para tablas muy grandes, una solución basada en operaciones matriciales probablemente sea más eficiente.
Un ejemplo;
// El script asume que las columnas están en el orden correcto: primero todas las A, luego todas las B en el mismo orden
//dt<
norte = ncol ( dt ) ;
AB = dt << obtener como matriz ;
C = AB [ 0 , 1 :: norte / 2 ] - AB [ 0 , norte / 2 + 1 :: norte ] ;
dt << conjunto matriz ( C ) ;
por ( i = 1 , i <= 3 , i ++,
por ( j = 1 , j <= 4 , j ++,
columna = Columna ( norte + 1 ) ; columna << escoger un nombre ( "C_X" || carbonizarse ( i ) || "_Y" || carbonizarse ( j )) ; norte ++
)) ;
Re: usar nombres de columnas en bucles¡Gracias!
Este evainsert realmente ayuda. ¡Ahora el código está funcionando!
Saludos,
Qian
Re: usar nombres de columnas en buclesPara tablas muy grandes, una solución basada en operaciones matriciales probablemente sea más eficiente.
Un ejemplo;
// El script asume que las columnas están en el orden correcto: primero todas las A, luego todas las B en el mismo orden
//dt<
norte = ncol ( dt ) ;
AB = dt << obtener como matriz ;
C = AB [ 0 , 1 :: norte / 2 ] - AB [ 0 , norte / 2 + 1 :: norte ] ;
dt << conjunto matriz ( C ) ;
por ( i = 1 , i <= 3 , i ++,
por ( j = 1 , j <= 4 , j ++,
columna = Columna ( norte + 1 ) ; columna << escoger un nombre ( "C_X" || carbonizarse ( i ) || "_Y" || carbonizarse ( j )) ; norte ++
)) ;
Re: usar nombres de columnas en buclesEcha un vistazo a la función Evalinsert(). Puede ser útil cuando se especifican fórmulas que dependen, por ejemplo, del contador.
Ejemplo con columnas de fórmula:
// hacer una tabla de ejemplo
dt = mesa nueva ( "prueba" ) ;
por ( i = 1 , i <= 3 , i ++,
por ( j = 1 , j <= 4 , j ++,
dt << nueva columna ( "HACHA" || carbonizarse ( i ) || "_Y" || carbonizarse ( j ) , numérico , valores ([ 5 , 6 ]))
)) ;
por ( i = 1 , i <= 3 , i ++,
por ( j = 1 , j <= 4 , j ++,
dt << nueva columna ( "B_X" || carbonizarse ( i ) || "_Y" || carbonizarse ( j ) , numérico , valores ([ 2 , 2 ]))
)) ;
// Agregar columnas de fórmula
F = expr ( analizar gramaticalmente ( Evalinsert ( "HACHA" || "^char(i)^" || "_Y" || "^char(j)^-B_X" || "^char(i)^" || "_Y" || "^char(j)^" ))) ;
por ( i = 1 , i <= 3 , i ++,
por ( j = 1 , j <= 4 , j ++,
dt << nueva columna ( "C_X" || carbonizarse ( i ) || "_Y" || carbonizarse ( j ) , numérico , fórmula ( evaluar ( F )))
)) ;
Re: usar nombres de columnas en buclesaquí están mis intentos fallidos, alguien por favor ayuda:
para ( i = 1, i <= 3, i++,
para (j = 1, j <=4, j++,
col_new_name="C_"||char(i)||"_"||char(j);
tabla de datos (dt_out) << agregue varias columnas (col_new_name, 1, "Numeric");
parse (col_new_name) << fórmula ( ascolumn (parse("A_"||char(i)||"_"||char(j)) -
ascolumn (parse("B_"||char(i)||"_"||char(j)) );
);
);
Las columnas con nombres corregidos se agregan a mi tabla, pero la fórmula es literalmente:
parse("A_"||char(i)||"_"||char(j))-parse("B_"||char(i)||"_"||char(j)
También probé eval(parse (*)), sin 'parse', sin ascolumn, etc. ninguno funciona.
Por favor ayuda.
Gracias,
Qian