Hallo zusammen,
Ich schreibe ein Skript, das anhand bestimmter Kriterien eine Teilmenge aus einer Datentabelle auswählt:
Beispiel dt ist meine Datentabelle mit der Spalte :Error_ID
Ich habe eingegeben: "dt_subset=dt< Nehmen wir nun an, die dt-Datentabelle enthält keine Zeilen mit Error_ID==0, dann ist dt_subset leer.
Ich hätte erwartet, dass dt_subset eine neue Datentabelle mit den gleichen Spalten wie die Tabelle dt, aber 0 Zeilen ist, sodass ich bei der anschließenden Überprüfung von "If( !Empty(dt_subset)...)" den Wert "false" erhalte und die Arbeit an der leeren Tabelle dt_subset nicht fortsetze.
Stattdessen erhalte ich einen Fehler, wenn ich versuche zu prüfen, ob dt_subset leer ist.
Im Grunde möchte ich prüfen können, ob die Auswahl leer ist. Haben Sie dafür eine Lösung?
Ich danke Ihnen für Ihre Hilfe!
Wenn Sie lediglich prüfen möchten, ob Zeilen ausgewählt sind, können Sie << Ausgewählte Zeilen abrufen verwenden.
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
dt << Select Where(:age >= 20);
selrows = dt << Get Selected Rows;
If(N Items(selrows) == 0,
Throw("No rows selected");
);
Wenn ich nach einem solchen Filter immer noch eine leere Tabelle benötige, gehe ich im Allgemeinen folgendermaßen vor:
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
rows_of_interest = dt << Get Rows Where(:age >= 20);
If(N Items(rows_of_interest) > 0,
dt_subset = dt << Subset(Rows(rows_of_interest), Selected Columns(0), Output table("SUBSET"));
,
dt_subset = dt << Subset(Rows(1), Selected Columns(0), Output table("SUBSET"));
dt_subset << Delete Rows(1);
);
Show(N Rows(dt_subset)); // demo purposes
Wenn Sie die Tabelle überprüfen möchten, die nicht erstellt wurde
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
dt_subset = dt << Select Where(:age >= 20) << Subset(Selected Rows(1), Selected Columns(0), Output table("SUBSET"));
If(Is Empty(dt_subset),
Throw("No rows selected");
);
Write();