Resta de varias columnasHola, equipo,
Necesita ayuda para desarrollar un script para hacer la resta de varias columnas, el nombre de la columna y el recuento es variable,
puede cambiar según el análisis,
Necesita completar el delta de la columna con diferencias en todos los valores de la misma fila,
datos de muestra como se muestra a continuación

AnalíticaTabla de datosScriptingRe: resta de varias columnasHola @jinsejoseph
¿Puede dar un ejemplo de la fórmula que desea utilizar?Esto suena como algo que usaría la transformación personalizada en el Herramientas de secuencias de comandos complemento para.

Re: resta de varias columnasHola, gracias por la respuesta,
Estoy usando JMP15, ¿pueden ayudarme a señalar el código que puedo usar?
Soy un principiante en JMP
Gracias por adelantado
Re: resta de varias columnasSalida esperada en delta como se muestra a continuación,

Re: resta de varias columnasHola ,
Estaba escribiendo una secuencia de comandos para el análisis de datos, y necesito que esto se implemente esta lógica entre el código solo para una tabla de datos,
¿Puedes ayudarme a señalar el código que puedo usar?
Gracias por adelantado
Re: resta de varias columnasAquí está la fórmula que usaría.Se basa en la función matricial Loc () que devuelve todas las entradas distintas de cero en una matriz.
x = :data[Row()] || :data1[Row()] ||
:data2[Row()] || :data3[Row()] ||
:data4[Row()] || :data5[Row()] ||
:data6[Row()] || :data7[Row()] ||
:data8[Row()] || :data9[Row()];
y = Loc( x );
Try( x[y[2]] - x[y[1]], . );
Re: resta de varias columnasHola Jim,
Gracias por el aporte,
Pero el nombre de la columna es un control de variable y el nombre puede cambiar según la ejecución,
¿Cómo codificar en esa situación?
Re: resta de varias columnasSuponiendo que no conoce los nombres y no conoce la cantidad de columnas, el siguiente código creará la fórmula requerida y luego creará la nueva columna con la fórmula generada
Names Default To Here( 1 );
dt = Current Data Table();
// Get the columns
colNames = dt << get column names( string, continuous );
// Build the formula
theExpr = "dt<<NEW column=""></NEW>

Se adjunta la tabla de datos de muestra que utilicé.
Re: resta de varias columnasTambién puede convertirlo en una función si necesita usarlo varias veces.
He aquí un ejemplo:
- Función
- Utiliza expresiones regulares para filtrar a las columnas de interés
- Requiere JMP16 debido a Filter Each
- Utiliza Loc () y cálculos matriciales
- Crea una nueva columna delta con los valores
Names Default To Here(1);
//example datatable
dt = New Table("Untitled",
Add Rows(5),
Compress File When Saved(1),
New Column("Column 1",
Numeric,
"Continuous",
Format("Best", 12),
Set Values([1, 0, 0, 1, 0]),
Set Display Width(55)
),
New Column("Column 2", Numeric, "Continuous", Format("Best", 12), Set Values([0, 2, 3, 0, 0])),
New Column("Column 3",
Numeric,
"Continuous",
Format("Best", 12),
Set Values([0, 3, 0, 0, 0]),
Set Display Width(87)
),
New Column("Column 4", Numeric, "Continuous", Format("Best", 12), Set Values([3, 0, 4, 0, 0])),
New Column("col", Character, "Nominal", Set Values({"a", "a", "a", "a", "a"}))
);
difference_between_min_max = Function({dt_ref, col_prefix_regex},
{Default Local},
//get columnn names of interest based on col_prefix
col_names_all = dt_ref << Get Column Names("Numeric", "String");
col_names_of_interest = Filter Each({val}, col_names_all,
!IsMissing(Regex(val, col_prefix_regex));
);
show(col_names_of_interest);
//all values for columns of interest, transpose for calculations
m = Transpose(dt_ref[0, col_names_of_interest]);
//replace 0 with missing to avoid calculation with those
m[Loc(m, 0)] = .;
//Get max and min values and deduct them
result = V Max(m) - V Min(m);
//Replace missing values with 0 for final results
result[Loc(result,.)] = 0;
//we could return result matrix here OR we can create new column with the function
dt_ref << New Column("delta", Numeric, Continuos, Set Values(result));
);
//example table in this example
difference_between_min_max(dt, "(Column )");
//example table by txnelson
//difference_between_min_max(Current Data Table(), "^(\D{1})$");
También podría convertirlo en Función personalizada
Re: resta de varias columnasHola Jim,
Gracias por la ayuda,
solución funcionando bien 
Re: resta de varias columnasAhora veo, en ese caso, personalmente usaría la función de transformación personalizada en el Herramientas de secuencias de comandos complemento.Seleccionaría todas las columnas que desea transformar (creo que data1-data10) y luego seleccionaría Transformación personalizada en el menú Cols (disponible después de instalar el complemento) e ingresaría estas configuraciones:
