Hola, si tengo una tabla que cambia de vez en cuando algo como esto:

pero otro día puede ser algo como esto:

y quiero crear de alguna manera una nueva fila que sume todas las columnas excepto Fecha y Datos
¿Cuál es la mejor manera de hacer esto en JSL?
Intenté tomar los nombres de las columnas y luego eliminar los datos y la fecha, pero luego no estoy seguro de cómo hacer la parte de la suma para cada columna
Intenté usar el resumen, pero cada vez que cambia, una vez será la suma de a, b, r, xy una vez a, c, f, así que no estoy seguro de que esto sea posible.
Summary(
Sum( :A ),
Sum( :B ),
Sum( :R ),
Sum( :X ),
Freq( "None" ),
Weight( "None" )
)
Summary(
Sum( :A ),
Sum( :C ),
Sum( :F ),
Freq( "None" ),
Weight( "None" )
)
Tal vez podrías usar una idea similar a la aquí:
¿Cómo crear un resumen de un montón de columnas sin especificar los nombres de las columnas?
Names Default To Here(1);
dt1 = New Table("Untitled1",
Add Rows(3),
Compress File When Saved(1),
New Column("data", Character, "Nominal", Set Values({"a", "b", "c"})),
New Column("date", Numeric, "Continuous", Format("Best", 12), Set Values([2021, 2021, 2021])),
New Column("a", Numeric, "Continuous", Format("Best", 12), Set Values([0, 50, 2])),
New Column("c", Numeric, "Continuous", Format("Best", 12), Set Values([1, 0, 0])),
New Column("f", Numeric, "Continuous", Format("Best", 12), Set Values([0, 0, 7]))
);
colname = dt1 << get column names(string);
colname = Substr(colname, 3); //remove data and date columns from list
summary_dt1 = dt1 << Summary(Sum(Eval(colname)), Freq("None"), Weight("None"));
summary_dt1 << Delete Columns("N Rows");
dt2 = New Table("Untitled2",
Add Rows(3),
Compress File When Saved(1),
New Column("data", Character, "Nominal", Set Values({"a", "b", "c"})),
New Column("date", Numeric, "Continuous", Format("Best", 12), Set Values([2021, 2021, 2021])),
New Column("a", Numeric, "Continuous", Format("Best", 12), Set Values([0, 50, 2])),
New Column("b", Numeric, "Continuous", Format("Best", 12), Set Values([1, 0, 0])),
New Column("r", Numeric, "Continuous", Format("Best", 12), Set Values([0, 0, 7])),
New Column("x", Numeric, "Continuous", Format("Best", 12), Set Values([2, 7, 1]))
);
colname = dt2 << get column names(string);
colname = Substr(colname, 3); //remove data and date columns from list
summary_dt2 = dt2 << Summary(Sum(Eval(colname)), Freq("None"), Weight("None"));
summary_dt2 << Delete Columns("N Rows");@jthi ha proporcionado la respuesta correcta.Tengo una pequeña modificación que encuentro muy útil en muchos de los scripts que escribo.
Encuentro que la mayoría de las veces, las tablas de datos con las que trabajo no siguen el mismo orden de las columnas desde un acceso hasta, digamos, el acceso de las siguientes semanas.Por lo tanto, cuando necesito emparejar una lista de columnas para resumir, etc. Utilizo el siguiente código.
colNamesNotToUse = {"DATA", "DATE"};
colname = dt << get column names( string );
For( i = N Items( colName ), i >= 1, i--,
If( Contains( colNamesNotToUse, Uppercase( colName[i] ) ),
Remove From( colName, i, 1 )
)
);