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 dado la respuesta correcta. He hecho una pequeña modificación que me resulta 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 columnas desde un acceso hasta, digamos, el acceso de la semana siguiente. Por lo tanto, cuando necesito reducir una lista de columnas para resumir, etc., uso 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 )
)
);