Expr y Nombre ExprHola,
Estoy analizando grandes cantidades de datos, 350.000 filas.
Para cada fila, el código ejecuta un bucle para calcular el delta único entre la tabla 1 y la tabla 2 y luego agrega ese delta a la columna de la tabla de datos principal. Algo no es correcto en el siguiente código. ¿Cualquier sugerencia?
Names Default To Here( 1 );
dt1 = Data Table( "dt_ref" );
dt2 = Data Table( "Data table" );
digt = 5;
itsel1 = {"Currents A", "Currents A2", "Currents A3", "Currents A4", "Currents A5"}; //List of columns to align.<BR />
//// Loop to calculate the delta between the dt1 and dt2 and the add the delta to the column of dt2 from the itsel1 list
dt2 << Add Row( 1, At Start );
dt2 << Begin Data Update;
For Each( {element, idx}, itsel1,
Eval(
Eval Expr(
Column( dt2, element ) << Set Each Value(
Expr(
Name Expr( Column( dt2, element ) )
),
Expr(
Num(
Substr( Char( Column( dt1, "Median" )[dt1 << get rows where( :Tests == element )] - Column( dt2, element ) ), 1, digt + 1 )
) + Column( dt2, element )
)
)
)
)
);
dt2 << Delete Row( 1 );
dt2 << End Data Update;
Gracias,
Jackie
Automatización y secuencias de comandosRe: Expr y Nombre ExprNo estoy seguro de qué tipo de cálculo estás realizando aquí
Num(Substr(Char(Column(dt1, "Median")[dt1 << get rows where(:Tests == element)] - Column(dt2, element)), 1, digt + 1)) + Column(dt2, element)
pero algo como esto podría ayudarte
Names Default To Here(1);
dt1 = Open("$DOWNLOADS/dt_ref.jmp");
dt2 = Open("$DOWNLOADS/Data table.jmp");
digt = 5;
itsel1 = {"Currents A", "Currents A2", "Currents A3", "Currents A4", "Currents A5"}; //List of columns to align.
dt2_colnames = dt2 << Get Column Names("String");
//// Loop to calculate the delta between the dt1 and dt2 and the add the delta to the column of dt2 from the itsel1 list
For Each({colname}, itsel1,
dt2_col_idx = Contains(dt2_colnames, colname);
If(dt2_col_idx == 0,
Print("Skipped column: " || colname);
continue(); // skip this column
);
dt1_row_idx = Loc(dt1[0, "Tests"], colname);
If(N Items(dt1_row_idx) == 0,
Print("Skipped row: " || colname);
continue();
,
dt1_row_idx = dt1_row_idx[1];
);
dt2[0, dt2_col_idx] = dt2[0, dt2_col_idx] - dt1[dt1_row_idx, "Median"];
);Re: Expr y Nombre ExprEntonces estoy tratando de alinear los datos en dt2 con los valores medianos de Test en dt1.
Entonces, el valor mediano de Actual A1 es 5.408, así que reste cada fila de Actual A1 en dt2 y súmelo nuevamente a los valores de fila de Actual A1 en dt2.
5,408 - 2,4963333333 = 2,912
2,912 + 2,496333333 = 5,40. Evito los bucles for tradicionales porque tengo un conjunto de datos enorme con 1 millón de filas y Expr sería más rápido

Re: Expr y Nombre Expr¿No terminarías simplemente con el valor mediano si no redondeas tus valores?
x = mediana,
y = valor de fila,
z = resultado
x - y = z
z + y = x?
Re: Expr y Nombre Expr@jthi Eso es correcto, pero quiero redondear "z" a 2 decimales y luego volver a sumarlo a y. El motivo para hacer esto es "compensar los datos del probador con los datos maestros".