Hola, equipo,
Necesita ayuda para desarrollar un script para restar varias columnas, el nombre de la columna y el recuento son variables.
puede cambiar según el análisis,
Es necesario completar la columna delta con diferencias, todos los valores de la misma fila,
datos de muestra como se muestra a continuación

Rendimiento esperado:

Hola Jim,
Gracias por la ayuda,
la solución funciona bien 
También puedes convertirlo en una función si necesitas usarlo varias veces.
Aquí hay un ejemplo:
- Función
- Utiliza expresiones regulares para filtrar las columnas de interés
- Requiere JMP16 debido al filtro cada uno
- 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
Suponiendo que no conoce los nombres y no conoce el número 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é.
Hola Jim,
Gracias por el aporte,
Pero el nombre de la columna es un control variable y el nombre puede cambiar según la ejecución,
¿Cómo codificar en esa situación?
Aquí está la fórmula que yo usaría.Se basa en la función de matriz 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]], . );
Hola ,
Estaba escribiendo un script para el análisis de datos y necesito implementar 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 de antemano
Ahora veo, en ese caso yo 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:

Salida esperada en delta como se muestra a continuación,

Hola, gracias por la respuesta,
Estoy usando JMP15. ¿Puedes ayudarme a señalar el código que puedo usar?
Soy principiante en JMP.
gracias de antemano
Hola @jinsejoseph
¿Puedes dar un ejemplo de la fórmula que quieres utilizar?Esto suena como algo que usaría en la transformación personalizada en el Herramientas de secuencias de comandos complemento para.
