Hallo, wenn ich eine Tabelle habe, die sich von Zeit zu Zeit ändert:

aber an einem anderen Tag kann es so etwas sein:

und ich möchte irgendwie eine neue Zeile erstellen, die alle Spalten außer Datum und Daten summiert
Was ist der beste Weg, dies in JSL zu tun?
Ich habe versucht, die Spaltennamen zu übernehmen und dann Daten und Datum zu entfernen, bin mir dann aber nicht sicher, wie ich den Summenteil für jede Spalte ausführen soll
Ich habe versucht, die Zusammenfassung zu verwenden, aber jedes Mal, wenn sie sich ändert, ist es die Summe von a, b, r, x und einmal a, c, f, daher bin ich mir nicht sicher, ob dies möglich ist.
Summary(
Sum( :A ),
Sum( :B ),
Sum( :R ),
Sum( :X ),
Freq( "None" ),
Weight( "None" )
)
Summary(
Sum( :A ),
Sum( :C ),
Sum( :F ),
Freq( "None" ),
Weight( "None" )
)
Vielleicht könnten Sie eine ähnliche Idee wie hier verwenden:
Wie erstelle ich eine Zusammenfassung einer Reihe von Spalten, ohne Spaltennamen anzugeben?
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 hat die richtige Antwort gegeben. Ich habe eine kleine Änderung vorgenommen, die ich in vielen der Skripte, die ich schreibe, sehr nützlich finde.
Ich stelle fest, dass die Datentabellen, mit denen ich arbeite, meistens nicht die gleiche Reihenfolge der Spalten aufweisen, wenn ich sie beispielsweise in der nächsten Woche aufrufe. Wenn ich also eine Liste von Spalten zusammenfassen muss, die zusammengefasst werden sollen usw., verwende ich den folgenden Code.
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 )
)
);