Datenfilter in einer For-Schleife gestopptIch schreibe ein For-Loop-Skript, um in einigen Teilen der unter verschiedenen experimentellen Bedingungen erfassten Spektren nach den x-Werten der y-Maximalspitzen zu suchen. Der Datenfilter stoppte jedoch nach einer Runde mit der Warnung „Ihre Auswahl wurde in einem anderen Fenster geändert.“ Wie kann ich diese Warnung beseitigen, damit das Skript reibungslos ausgeführt werden kann, um die For-Schleife abzuschließen?
Ich möchte das Problem anhand des Beispiels Big Class.jmp demonstrieren. Ziel ist es, die Teilmenge der Daten anzuzeigen, die den Personen mit dem maximalen Gewicht (Y-Maximalwert) in mehreren Größenbereichen (X-Wertbereiche, z. B. 55-60, 60-62, 62-65) in verschiedenen Altersgruppen entspricht (ähnlich den experimentellen Bedingungen).
Die x-Wertebereiche werden in zwei Listen gruppiert, von denen eine die unteren und die andere die oberen Grenzen enthält. Das Maximum wird durch „Col Maximum“ mit Datenfilter ermittelt. Die Berechnung wird für mehrere x-Wertebereiche entlang der Listen wiederholt. Nach der Ausführung für i=1 wird die Schleife jedoch angehalten und die Warnung „Datenfilter“ wird angezeigt. Wie kann ich sie entfernen, damit das Skript die For-Schleife abschließen kann?
Names Default To Here( 1 );
ListA = {55, 60, 62};
ListB = {60, 62, 65};
for(i=1, i<=3, i++,
dt = Data Table( "Big Class" );
Current Data Table (dt);
a = ListA[i];
b = ListB[i];
dt << Data Filter(Add Filter(columns(:height), where(:height > a & :height < b)), Mode( Select( 0 ), Show( 0 ), Include( 1 )), Show Window(0), Auto Clear(1));
dt << select where (col maximum(:weight, :age, Excluded()) == :weight & :height > a & :height < b);
dt << subset(selected rows(1), columns({"name", "age", "sex", "height", "weight"}));
dt << Clear Row States;
dt << Clear Select();
);
Automatisierung und SkriptingBetreff: Datenfilter stoppte in einer For-SchleifeIch glaube, dass das vereinfachte JSL unten Ihnen das bietet, was Sie wollen.
Names Default To Here( 1 );
dt =
// Open Data Table: semiconductor capability.jmp
// → Data Table( "semiconductor capability" )
Open( "$SAMPLE_DATA/big class.jmp" );
ListA = {55, 60, 62};
ListB = {60, 62, 65};
For( i = 1, i <= 3, i++,
a = ListA[i];
b = ListB[i];
Current Data Table( dt );
theMax = Col Maximum( If( :weight & :height > a & :height < b, :weight, . ) );
dt << select where( theMax == :weight & :height > a & :height < b );
If( N Rows( dt << get selected rows ) > 0,
dt << subset( selected rows( 1 ), columns( {"name", "age", "sex", "height", "weight"} ) )
);
dt << Clear Row States;
Wait( 0 );
);Betreff: Datenfilter stoppte in einer For-SchleifeDieses Skript verfügt jedoch nicht über die Funktion „nach Alter“. Wenn in meinem Skript beispielsweise i = 2 (ListA = 60, ListB = 62) ist, lautet das Ergebnis
| Name | Alter | Sex | Höhe | Gewicht |
| JAMES | 12 | M | 61 | 128 |
| ALICE | 13 | F | 61 | 107 |
| JUDY | 14 | F | 61 | 81 |
Ihr Skript gibt den entsprechenden Teil jedoch als
| Name | Alter | Sex | Höhe | Gewicht |
| JAMES | 12 | M | 61 | 128 |
Das liegt daran, dass mein Skript den Teil „nach Alter“ in Col Maximum enthält. Leider passiert das auch, wenn ich den Teil „nach Alter“ in Ihr Skript einfüge:
theMax = Col Maximum( If( :weight & :height > a & :height < b, :weight, . ), :age );
Eine Warnung wird angezeigt: „Ungültige Zeilennummer“
Ihr Skript läuft reibungslos. Wie können wir den Teil „nach Alter“ in Col Maximum in Ihr Skript einfügen?
Betreff: Datenfilter wurde in einer For-Schleife gestopptBitte werfen Sie einen Blick auf die Dokumentation von Col Max – es kann tatsächlich alle erforderlichen Aufgaben erledigen.
Verwenden Sie einfach eine Hilfsspalte height_bin (z. B. über Transform Column). Ein Datenfilter ist nicht erforderlich ...

dieser Tabelle zufolge sind es James, Barbara, Judy und Marion.
Wenn Sie die Höhenbehälter über einen Datenfilter definieren möchten, achten Sie darauf, dass Sie die Verbindungspunkte nicht verpassen, z. B. Höhe = 60.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << New Column( "height_bin",
"Character",
Formula(
If(
:height < 60, "<60",
:height <62, "<62",
">=62"
)
) );
New Column( "weight_max",
Formula( Col Maximum( :weight, :age, :height_bin ) )
);
New Column( "is max",nominal,
Formula( :weight == :weight_max ),
);
Graph Builder(
Variables( X( :age ), Y( :weight ), Group Y( :height_bin ) ),
Elements( Bar( X, Y, Label( "Label by Row" ) ) ),
Local Data Filter( Add Filter( columns( :is max ), Where( :is max == 1 ) ) )
);