n개의 연속 행 조건을 기반으로 새 열을 정의하는 방법안녕 모두,
임계값을 채우는 다른 열의 최소 10개 연속 행에 따라 요소가 달라지는 수식 열을 찾고 있습니다. 첨부된 이미지 및 데이터를 참조하십시오. 여기에는 "장애인 지역 수정"이라는 필수 열도 포함됩니다.
도와주세요.
고마워, HSS

스크립팅Re: n개의 연속 행 조건을 기반으로 새 열을 정의하는 방법알고리즘을 세 부분으로 나눌 수 있습니다.
- 750 이상의 값이 충분할 때 카운터 증가(일부 지원 변수 설정 가능)
- AFTER 750 미만의 값이 하나라도 있을 때 카운터를 늘리고 각 단계에 대해 한 번만 수행합니다. 1. 증가(일부 지원 변수 설정 가능)
- 카운터를 늘리지 마십시오(일부 지원 변수를 설정할 수 있음).
이는 몇 가지 추가 지원 변수와 관련하여 가장 쉬울 수 있습니다(가장 쉽지는 않지만 가장 명확함).
아마도 다음과 같을 것입니다:
If(Row() == 1,
counter = 1;
allow_over_limit_change = 1;
allow_below_limit_change = 0;
);
current_vals_to_check = :Current[Row()::Min(Dim()[1], Row() + 9)];
over_limit_count = Sum(current_vals_to_check >= 750);
If(allow_over_limit_change & over_limit_count >= 10,
counter++;
allow_below_limit_change = 1;
allow_over_limit_change = 0;
, allow_below_limit_change & :Current < 750,
counter++;
allow_below_limit_change = 0;
allow_over_limit_change = 1;
);
counter;
Row() == 1 if 문은 이것으로 대체될 가능성이 높습니다(제 생각에는 If 문을 사용하는 것만큼 명확하지 않습니다).
As Constant(counter = 1);
As Constant(allow_over_limit_change = 1);
As Constant(allow_below_limit_change = 0);
Re: n개의 연속 행 조건을 기반으로 새 열을 정의하는 방법여보세요 @jthi ,
새로운 요구 사항에 대해 무언가를 시도했습니다. 최상의 솔루션은 아니지만 해결 방법입니다. 그리고 원래 문제에 대해 제안한 솔루션에 매우 가깝습니다. 지금까지는 잘 작동합니다.
If( Row() == 1, val = 1 );
Next_10_values = Sum( :Current[Index( Row(), Min( Dim()[1], Row() + 9 ) )] >= 750 );
Previous_10_values = Sum( :Current[Index( Row(), Min( Dim()[1], Row() - 9 ) )] >= 750 );
If(
Next_10_values == 10 & Lag( :Current ) < 750 | Previous_10_values == 9 & :Current < 750 &
Lag( :Current ) >= 750,
val = val + 1
);
val;
귀하의 지원에 감사드립니다.
감사합니다, HSS
Re: n개의 연속 행 조건을 기반으로 새 열을 정의하는 방법변경은 필요한 경우 val을 증가시키는 데 사용됩니다. 문제 3의 경우 조건이 변경됨에 따라 알고리즘에 대한 재작성이 필요합니다.
Re: n개의 연속 행 조건을 기반으로 새 열을 정의하는 방법@jthi 설명해 주셔서 감사합니다.
나는 그것을 행별로 실행하고 꽤 많이 얻었습니다.
여전히 스크립트에 변수 'change'가 있는 이유와 그 목적이 무엇인지 전혀 모르겠습니다. 현재 값을 만족하는 행에서 10개 이상의 항목을 얻을 때마다 1(설정 값으로)과 0의 두 값을 취합니다. 그러나 새 열 인덱싱에는 어디에도 나타나지 않습니다. 그러나 변수 'Change' 없이 실행하면 올바른 항목을 얻지 못합니다. 그러나 계산/인덱싱에 어떻게 그리고 어디에 영향을 미치는지 알 수 없습니다.
그리고 문제의 세 번째 부분 - :current>=750 의 원하는 영역이 종료될 때 실행 중인 인덱스를 어떻게 늘릴 수 있습니까?
고마워, HSS
Re: n개의 연속 행 조건을 기반으로 새 열을 정의하는 방법내가 제안하고 싶은 것은 스크립트를 다음과 같이 수정하여 "행 단위로" 실행할 수 있도록 하는 것입니다.
// Names Default To Here(1);
// Clear Log();
dt = Current Data Table();
run_script = Expr(
If(Row() == 1,
val = 1; // this is breaking rule of > 750, so we define it separately
change = 1;
);
next_vals = :Current[Row()::Min(Dim()[1], Row() + 9)];
over_limit = Sum(next_vals >= 750);
If(change & over_limit >= 10,
val++;
change = 0;
, over_limit < 10,
change = 1;
);
val;
show(row(), val, change, next_vals, over_limit);
Write("\!N");
);
Row() = 1;
run_script;
Row() = 2;
run_script;
Row() = 5;
run_script;
그런 다음 스크립트를 부분적으로 쉽게 실행하고 로그를 확인하여 어떤 일이 발생하는지 확인할 수 있습니다(원하는 경우 한 번에 한 행씩 실행할 수도 있음).
스크립트 창 및 포함된 로그:

스크립팅 인덱스도 Dim()과 같은 기능을 설명하는 데 도움이 됩니다.
이것이 도움이 되지 않는 경우 이 게시물에 댓글을 달고 저를 태그해 주시면 더 자세히 설명해 드릴 수 있습니다.
Re: n개의 연속 행 조건을 기반으로 새 열을 정의하는 방법이전 메시지에 첨부된 이미지에 오류가 있습니다. 실수로 이전 요구 사항에 대한 카운터도 변경했으므로 마지막 빨간색 사각형을 무시하십시오. 그래서는 안 됩니다.
고마워, HSS
Re: n개의 연속 행 조건을 기반으로 새 열을 정의하는 방법안녕 Jarmo와 모두,
이 코드는 잘 작동하고 스크립트에서 완벽하게 구현할 수 있습니다.
그러나 한편으로는 이해할 수 없습니다. 조금 수정하고 싶은데 수정이 안되네요. 저를 도와 주시겠습니까?
1. 이 진술은 무엇을 하는 것입니까?
next_vals = :Current[Row()::Min(Dim()[1], Row() + 9)];
2. '변화'에 대한 증가가 어디에서 발생하고 이 조건이 어떻게 충족될 수 있는지 이해할 수 없습니다.
If(change & over_limit >= 10,
나는 그것이 - "If( change >=10 & over_limit >=10
3. 현재 문제에서 원하는 영역이 완료되면(최소 10개 항목 포함) 카운터를 1씩 늘리고 싶습니다.

도움이 필요하세요?
고마워, HSS
Re: n개의 연속 행 조건을 기반으로 새 열을 정의하는 방법감사합니다.
완벽하게 작동합니다. 이제 이것을 내 스크립트에 통합해야 합니다. 내가 할 수 있기를 바랍니다.
고마워, HSS
Re: n개의 연속 행 조건을 기반으로 새 열을 정의하는 방법데이터 테이블 첨자 하나의 옵션입니다.
현재 열 이름을 변경했습니다.
Names Default To Here(1);
dt = Current Data Table();
dt << New Column("a", Numeric, Ordinal,
<< Set Each Value(
If(Row() == 1,
val = 1; // this is breaking rule of > 750, so we define it separately
change = 1;
);
next_vals = :Current[Row()::Min(Dim()[1], Row() + 9)];
over_limit = Sum(next_vals >= 750);
If(change & over_limit >= 10,
val++;
change = 0;
, over_limit < 10,
change = 1;
);
val;
)
);