Restar entre varias columnas
dt = current data table();
For ( i=0 , i<8, i++,
dt << new column( "RESULT",
Numeric,
"Continuous",
For (x=1, x<50, x++,
Formula(Column(3+i)[x]-Column(2+i)[x]),
));
);
Me gustaría restar datos entre varias columnas. Probé el script anterior pero no funciona. ¿Existe una manera más efectiva de hacerlo?
Resultado Esperado:
resultado = datos2 - datos1
resultado1 = datos4 - datos3
resultado2 = datos6 - datos5
| Artículo | datos1 | datos2 | datos3 | datos4 | datos5 | datos6 | datos7 | datos8 | datos9 | datos10 | datos11 | datos12 | datos13 | datos14 | datos 15 | datos16 |
| A1 | 0,51 | 0,53 | 0,48 | 0,53 | 0,49 | 0,60 | 0,56 | 0,69 | 0,62 | 0,77 | 0,55 | 0,82 | 0,58 | 0,85 | 0,61 | 0,88 |
| A2 | 0,49 | 0,51 | 0,48 | 0,53 | 0,48 | 0,60 | 0,57 | 0,70 | 0,61 | 0,78 | 0,56 | 0,83 | 0,59 | 0,86 | 0,64 | 0,90 |
| A3 | 0,50 | 0,52 | 0,46 | 0,52 | 0,49 | 0,60 | 0,56 | 0,69 | 0,62 | 0,77 | 0,54 | 0,81 | 0,58 | 0,84 | 0,62 | 0,88 |
| A4 | 0,47 | 0,50 | 0,48 | 0,53 | 0,48 | 0,60 | 0,57 | 0,70 | 0,63 | 0,78 | 0,56 | 0,83 | 0,60 | 0,86 | 0,63 | 0,89 |
| A5 | 0,49 | 0,50 | 0,51 | 0,52 | 0,59 | 0,60 | 0,68 | 0,70 | 0,74 | 0,78 | 0,80 | 0,84 | 0,82 | 0,87 | 0,85 | 0,90 |
| A6 | 0,47 | 0,50 | 0,49 | 0,54 | 0,48 | 0,61 | 0,55 | 0,70 | 0,62 | 0,78 | 0,59 | 0,85 | 0,64 | 0,89 | 0,69 | 0,94 |
| A7 | 0,48 | 0,51 | 0,48 | 0,53 | 0,48 | 0,60 | 0,58 | 0,71 | 0,65 | 0,80 | 0,60 | 0,85 | 0,63 | 0,88 | 0,65 | 0,90 |
| A8 | 0,51 | 0,53 | 0,48 | 0,53 | 0,49 | 0,60 | 0,56 | 0,69 | 0,62 | 0,78 | 0,54 | 0,82 | 0,58 | 0,85 | 0,63 | 0,89 |
| A9 | 0,50 | 0,52 | 0,48 | 0,53 | 0,48 | 0,59 | 0,49 | 0,69 | 0,61 | 0,77 | 0,55 | 0,82 | 0,60 | 0,86 | 0,63 | 0,89 |
| A10 | 0,51 | 0,53 | 0,49 | 0,54 | 0,49 | 0,60 | 0,54 | 0,69 | 0,61 | 0,77 | 0,54 | 0,82 | 0,57 | 0,85 | 0,62 | 0,89 |
| A11 | 0,52 | 0,53 | 0,52 | 0,53 | 0,59 | 0,60 | 0,68 | 0,70 | 0,74 | 0,78 | 0,79 | 0,83 | 0,81 | 0,86 | 0,84 | 0,90 |
| A12 | 0,51 | 0,52 | 0,53 | 0,54 | 0,61 | 0,62 | 0,68 | 0,70 | 0,76 | 0,79 | 0,80 | 0,84 | 0,83 | 0,88 | 0,86 | 0,92 |
| A13 | 0,48 | 0,51 | 0,48 | 0,53 | 0,48 | 0,60 | 0,57 | 0,70 | 0,64 | 0,79 | 0,56 | 0,83 | 0,59 | 0,86 | 0,64 | 0,90 |
| A14 | 0,47 | 0,50 | 0,47 | 0,53 | 0,49 | 0,60 | 0,57 | 0,70 | 0,63 | 0,78 | 0,56 | 0,83 | 0,59 | 0,86 | 0,63 | 0,90 |
| A15 | 0,47 | 0,50 | 0,47 | 0,52 | 0,47 | 0,59 | 0,56 | 0,69 | 0,63 | 0,78 | 0,56 | 0,83 | 0,59 | 0,86 | 0,64 | 0,90 |
| A16 | 0,51 | 0,53 | 0,48 | 0,53 | 0,48 | 0,60 | 0,57 | 0,70 | 0,62 | 0,77 | 0,54 | 0,82 | 0,58 | 0,85 | 0,62 | 0,89 |
| A17 | 0,48 | 0,51 | 0,46 | 0,51 | 0,47 | 0,59 | 0,56 | 0,69 | 0,62 | 0,77 | 0,55 | 0,82 | 0,60 | 0,86 | 0,63 | 0,89 |
| A18 | 0,48 | 0,51 | 0,47 | 0,52 | 0,48 | 0,60 | 0,56 | 0,70 | 0,61 | 0,77 | 0,56 | 0,83 | 0,61 | 0,87 | 0,64 | 0,90 |
| A19 | 0,52 | 0,54 | 0,49 | 0,54 | 0,49 | 0,60 | 0,57 | 0,70 | 0,63 | 0,78 | 0,56 | 0,83 | 0,60 | 0,86 | 0,64 | 0,90 |
| A20 | 0,51 | 0,52 | 0,52 | 0,53 | 0,58 | 0,60 | 0,67 | 0,70 | 0,75 | 0,79 | 0,80 | 0,84 | 0,83 | 0,88 | 0,86 | 0,91 |
| A21 | 0,53 | 0,53 | 0,53 | 0,54 | 0,60 | 0,61 | 0,69 | 0,71 | 0,75 | 0,79 | 0,80 | 0,84 | 0,82 | 0,87 | 0,85 | 0,90 |
| A22 | 0,53 | 0,53 | 0,53 | 0,54 | 0,60 | 0,61 | 0,68 | 0,70 | 0,75 | 0,79 | 0,80 | 0,84 | 0,82 | 0,87 | 0,85 | 0,91 |
| A23 | 0,48 | 0,51 | 0,48 | 0,53 | 0,50 | 0,61 | 0,56 | 0,69 | 0,62 | 0,77 | 0,53 | 0,82 | 0,59 | 0,86 | 0,62 | 0,89 |
| A24 | 0,48 | 0,51 | 0,47 | 0,53 | 0,48 | 0,60 | 0,59 | 0,72 | 0,65 | 0,80 | 0,60 | 0,85 | 0,63 | 0,88 | 0,64 | 0,90 |
| A25 | 0,48 | 0,51 | 0,47 | 0,52 | 0,48 | 0,60 | 0,57 | 0,70 | 0,62 | 0,77 | 0,54 | 0,82 | 0,59 | 0,86 | 0,62 | 0,89 |
| A26 | 0,49 | 0,51 | 0,47 | 0,52 | 0,49 | 0,60 | 0,57 | 0,70 | 0,64 | 0,79 | 0,57 | 0,84 | 0,59 | 0,86 | 0,64 | 0,90 |
| A27 | 0,51 | 0,52 | 0,52 | 0,53 | 0,59 | 0,60 | 0,68 | 0,70 | 0,74 | 0,78 | 0,79 | 0,83 | 0,82 | 0,86 | 0,85 | 0,89 |
| A28 | 0,51 | 0,52 | 0,52 | 0,53 | 0,59 | 0,60 | 0,68 | 0,70 | 0,74 | 0,78 | 0,79 | 0,83 | 0,81 | 0,86 | 0,85 | 0,90 |
| A29 | 0,52 | 0,54 | 0,49 | 0,54 | 0,51 | 0,61 | 0,58 | 0,71 | 0,65 | 0,80 | 0,58 | 0,84 | 0,63 | 0,88 | 0,68 | 0,93 |
| A30 | 0,48 | 0,51 | 0,47 | 0,52 | 0,39 | 0,59 | 0,57 | 0,70 | 0,64 | 0,79 | 0,58 | 0,84 | 0,60 | 0,86 | 0,63 | 0,89 |
| A31 | 0,49 | 0,52 | 0,46 | 0,52 | 0,48 | 0,60 | 0,57 | 0,70 | 0,63 | 0,78 | 0,57 | 0,83 | 0,61 | 0,87 | 0,64 | 0,90 |
| A32 | 0,51 | 0,53 | 0,48 | 0,53 | 0,50 | 0,61 | 0,57 | 0,70 | 0,63 | 0,78 | 0,56 | 0,83 | 0,60 | 0,86 | 0,63 | 0,89 |
| A33 | 0,50 | 0,52 | 0,48 | 0,53 | 0,50 | 0,61 | 0,57 | 0,70 | 0,63 | 0,78 | 0,56 | 0,83 | 0,60 | 0,87 | 0,65 | 0,91 |
| A34 | 0,48 | 0,51 | 0,48 | 0,53 | 0,49 | 0,60 | 0,58 | 0,71 | 0,64 | 0,79 | 0,56 | 0,84 | 0,59 | 0,86 | 0,62 | 0,89 |
| A35 | 0,47 | 0,50 | 0,47 | 0,52 | 0,47 | 0,59 | 0,55 | 0,69 | 0,61 | 0,77 | 0,55 | 0,82 | 0,60 | 0,86 | 0,65 | 0,90 |
| A36 | 0,49 | 0,52 | 0,47 | 0,53 | 0,48 | 0,59 | 0,56 | 0,69 | 0,61 | 0,77 | 0,55 | 0,82 | 0,60 | 0,86 | 0,63 | 0,89 |
| A37 | 0,48 | 0,51 | 0,48 | 0,53 | 0,48 | 0,60 | 0,58 | 0,71 | 0,64 | 0,79 | 0,57 | 0,84 | 0,61 | 0,87 | 0,65 | 0,91 |
| A38 | 0,50 | 0,52 | 0,48 | 0,53 | 0,48 | 0,60 | 0,57 | 0,70 | 0,63 | 0,78 | 0,59 | 0,85 | 0,61 | 0,88 | 0,65 | 0,91 |
| A39 | 0,53 | 0,53 | 0,52 | 0,53 | 0,59 | 0,60 | 0,68 | 0,70 | 0,74 | 0,78 | 0,79 | 0,83 | 0,83 | 0,87 | 0,85 | 0,90 |
| A40 | 0,53 | 0,53 | 0,53 | 0,54 | 0,60 | 0,61 | 0,68 | 0,70 | 0,75 | 0,79 | 0,80 | 0,84 | 0,83 | 0,87 | 0,85 | 0,91 |
| A41 | 0,51 | 0,53 | 0,48 | 0,53 | 0,49 | 0,60 | 0,54 | 0,69 | 0,61 | 0,77 | 0,55 | 0,82 | 0,60 | 0,86 | 0,64 | 0,90 |
| A42 | 0,59 | 0,50 | 0,47 | 0,52 | 0,49 | 0,60 | 0,57 | 0,70 | 0,64 | 0,79 | 0,56 | 0,83 | 0,61 | 0,87 | 0,64 | 0,90 |
| A43 | 0,51 | 0,52 | 0,52 | 0,53 | 0,59 | 0,60 | 0,68 | 0,70 | 0,74 | 0,78 | 0,79 | 0,83 | 0,82 | 0,86 | 0,85 | 0,90 |
| A44 | 0,51 | 0,52 | 0,52 | 0,53 | 0,59 | 0,60 | 0,68 | 0,70 | 0,74 | 0,78 | 0,79 | 0,83 | 0,81 | 0,85 | 0,84 | 0,89 |
| A45 | 0,51 | 0,52 | 0,53 | 0,54 | 0,59 | 0,60 | 0,69 | 0,71 | 0,76 | 0,80 | 0,81 | 0,85 | 0,83 | 0,88 | 0,86 | 0,92 |
| A46 | 0,49 | 0,51 | 0,48 | 0,53 | 0,48 | 0,60 | 0,57 | 0,70 | 0,62 | 0,78 | 0,56 | 0,83 | 0,61 | 0,87 | 0,66 | 0,91 |
| A47 | 0,49 | 0,52 | 0,48 | 0,53 | 0,47 | 0,59 | 0,54 | 0,69 | 0,61 | 0,76 | 0,52 | 0,81 | 0,56 | 0,84 | 0,61 | 0,88 |
| A48 | 0,47 | 0,50 | 0,47 | 0,52 | 0,47 | 0,59 | 0,57 | 0,70 | 0,63 | 0,78 | 0,56 | 0,83 | 0,59 | 0,86 | 0,63 | 0,90 |
| A49 | 0,50 | 0,51 | 0,52 | 0,53 | 0,59 | 0,60 | 0,68 | 0,70 | 0,74 | 0,78 | 0,79 | 0,83 | 0,82 | 0,87 | 0,85 | 0,90 |
Automatización y secuencias de comandosAnálisis y modelado de datos básicosRe: Restar entre varias columnasHola @kuanaunwei ,
Para mí, la forma eficaz de aprender el script correcto es utilizar "Flujo de trabajo" (estoy usando JMP 17).
A continuación se muestra cómo lo haría;
Utilizo hacer clic en un botón para obtener el resultado manualmente; luego, verifico el código en "Flujo de trabajo". Agréguelo en mi script

Según el script JSL anterior, no estoy seguro de si solo desea tener una columna de fórmula simple o una columna de fórmula con condiciones (IF/Else).
Re: Restar entre varias columnasEsto podría dar algunas ideas adicionales.
Names Default To Here(1);
dt = Open("$DOWNLOADS/724991.jmp");
cont_cols = dt << Get Column Names(Continuous, "String");
first_cols = cont_cols[2::N Items(cont_cols)::2];
second_cols = cont_cols[1::N Items(cont_cols)::2];
If(N Items(first_cols) != N Items(second_cols),
Throw("column mismatch");
);
For Each({{col1, col2}}, Across(first_cols, second_cols),
Eval(EvalExpr(
new_col = dt << New Column("Result", Numeric, Continuous, Formula(
Expr(Name Expr(AsColumn(dt, col1))) - Expr(Name Expr(AsColumn(dt, col2)))
));
));
dt << Run Formulas;
new_col << Suppress Eval(1);
);
Si solo le importan los resultados, otra opción es apilar sus datos, calcular el resultado en una tabla apilada, dividirlo (es posible que tenga que agregar una nueva columna para nombrar correctamente la columna de resultados) y volver a unirlos.



y luego JMP puede crear algún tipo de script para usted

Re: Restar entre varias columnasLos nombres de las columnas serán diferentes y el tamaño de los datos también será diferente, por lo que es posible que el flujo de trabajo no sea la mejor solución para mi caso. Gracias por la recomendación.:)
Re: Restar entre varias columnasPerdón por la respuesta tardía. No pude iniciar sesión en mi cuenta de JMP por algún motivo. Además, gracias por la idea que me diste sobre el scripting. Me ayudó.