테이블에서 값이 50보다 큰 모든 행을 찾고 해당 행 바로 다음에 10개의 행을 반환하는 스크립트를 작성해야 합니다. 누군가 이 스크립트를 도와줄 수 있나요? 감사합니다!
여기에 있는 데이터에 대한 지식 없이도 시작할 수 있는 한 가지 옵션이 있습니다(50이 아닌 120 이상의 값을 찾습니다).
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">Re: 값이 50보다 큰 모든 행과 그 이후 10개 행을 찾습니다.</LINGO-SUB><LINGO-BODY id="lingo-body-754828" slang="en-US" mode="CREATE"><P>다음은 세 가지 옵션입니다. 하나 하나의 오류로 인해 잘못된 행을 캡처할 수 있습니다.</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))));
);
메시지 선택 << 데이터 테이블에 대한 행()을 선택합니다.
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);선택한 행을 새 데이터 테이블로 만들려면 하위 집합 플랫폼을 사용해야 합니다.
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));정말 고맙습니다! rs(모든 행 선택)를 새 데이터 테이블로 만들려면 어떻게 해야 하나요?