Ich muss ein Skript schreiben, um alle Zeilen in der Tabelle mit einem Wert > 50 zu finden und 10 Zeilen direkt nach diesen Zeilen zurückzugeben. Kann mir bitte jemand mit diesem Skript helfen? Danke!
Ohne Kenntnis der Daten, die Sie haben, ist hier eine Option, mit der Sie beginnen könnten (es wird nach Werten über 120 gesucht, nicht nach 50).
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
r = As List(dt << Get Rows Where(:weight > 120));
rs = {};
max_rows = N Rows(dt);
For Each({cur_r}, r,
Insert Into(rs, Index(cur_r + 1, Min(max_rows, cur_r + 10)));
);
show(r);
show(rs);
// r = {2, 4, 7, 18, 30, 37, 39, 40};
// rs = {[2 3 4 5 6 7 8 9 10 11], [4 5 6 7 8 9 10 11 12 13], [7 8 9 10 11 12 13 14 15 16], [18 19 20 21 22 23 24 25 26 27], [30 31 32 33 34 35 36 37 38 39], [37 38 39 40], [39 40], [40]};
</CODE></P></LINGO-BODY><LINGO-SUB id="lingo-sub-754828" slang="en-US" mode="CREATE">Betreff: Alle Zeilen mit Werten > 50 und die darauffolgenden 10 Zeilen finden</LINGO-SUB><LINGO-BODY id="lingo-body-754828" slang="en-US" mode="CREATE"><P>Hier sind drei verschiedene Optionen, die möglicherweise aufgrund von Off-by-one-Fehlern falsche Zeilen erfassen</P>
<PRE><CODE class=" language-jsl">// Option1
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// https://leetcode.com/problems/merge-intervals/solutions/3161191/solution/
merge_intervals = function({intervals}, {Default Local},
// Assumes array is sorted by first index
stack = {};
For Each({interval}, intervals,
If(N Items(stack) == 0 | stack[N Items(stack)][2] < interval[1],
Insert Into(stack, Eval List({interval}));
,
stack[N Items(stack)][2] = max(stack[N Items(stack)][2], interval[2]);
);
);
return(stack);
);
r_start = (dt << Get Rows Where(:weight > 120)) + 1;
r_end = r_start + 10;
toohigh = Loc(r_start > N Rows(dt));
r_start[toohigh] = N Rows(dt);
toohigh = Loc(r_end > N Rows(dt));
r_end[toohigh] = N Rows(dt);
rs = As List(r_start || r_end);
res = merge_intervals(rs);
// Option2
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
r_start = dt << Get Rows Where(:weight > 120);
res2 = dt << get rows where(Any(Row() > r_start & Row() <= r_start + 10));
// Option3
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
r = As List(dt << Get Rows Where(:weight > 120));
rs = {};
max_rows = N Rows(dt);
For Each({cur_r}, r,
Insert Into(rs, As List(Index(Min(max_rows, cur_r + 1), Min(max_rows, cur_r + 10))));
);
Wählen Sie Nachricht << Zeilen() zur Datentabelle auswählen.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
r_start = dt << Get Rows Where(:weight > 120);
res2 = dt << get rows where(Any(Row() > r_start & Row() <= r_start + 10));
dt << Select Rows(res2);Um die ausgewählten Zeilen in eine neue Datentabelle umzuwandeln, muss lediglich die Subset-Plattform verwendet werden.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
r_start = dt << Get Rows Where(:weight > 120);
res2 = dt << get rows where(Any(Row() > r_start & Row() <= r_start + 10));
dt << Select Rows(res2);
dtSub = dt << subset( selected rows(1), selected columns(0));Vielen Dank! Wie kann ich aus rs (alle Zeilen ausgewählt) eine neue Datentabelle machen?