다른 열의 일부 패턴을 기반으로 두 개의 열을 생성하려고 합니다.안녕하세요 여러분,
다른 두 열("필수 열1" 및 "필수 열2")의 패턴을 기반으로 두 개의 새 열을 생성하려고 합니다. 첨부된 이미지를 참고해주세요 -

도움이나 제안이 있으십니까?
감사해요.
품질 및 프로세스 엔지니어링Re: 다른 열의 일부 패턴을 기반으로 두 개의 열을 생성하려고 합니다.감사해요 @jthi 좋은 설명을 위해.
Re: 다른 열의 일부 패턴을 기반으로 두 개의 열을 생성하려고 합니다.1. 아마도 이 이미지는 첫 번째 아이디어가 작동하지 않는 이유를 설명할 수 있습니다. (제 기억이 정확하다면 두 번째 솔루션은 이에 의존합니다. . + 1 그것은 될 것이다 . 

If 문에서 다양한 비교를 수행하고 그로부터 수식을 생성하여 무엇이 True를 반환하는지, 언제 반환하는지 더 쉽게 확인할 수 있습니다.
비교를 약간 수정하면 첫 번째 솔루션이 작동할 가능성이 높습니다( 누락됨(:StartEnd) & Lag(:StartEnd) != "끝" | :StartEnd == "끝", val += 1 ). 하지만 이 변경으로 인해 두 번째 비교도 약간 변경해야 합니다(Row() != Col Max(Row()) 확인 추가).
2. 아이디어 Row() == Col Max(Row()) & :StartEnd == "시작" 우리가 테이블의 마지막 행에 있는지 확인하는 것입니다. :StartEnd 값이 "Start"입니다. 이전 if 문을 기반으로 값을 1로 설정하지 않습니다. Row()는 행 번호를 알려주고 Col Max(Row())는 데이터 테이블의 최대 행 번호를 반환합니다. 테이블의 마지막 행(예: 시작/끝의 다음 행)이므로 약간 불필요한 확인일 수 있지만 결과 열에 있는 것처럼 구현했습니다.
마지막 if-else의 일반적인 아이디어는 다음과 같습니다.
1. Lag(:StartEnd) == "End" -> 이것은 End가 카운터된 후 일반적인 "중지"입니다.
2. Row() == Col Max(Row()) & :StartEnd == "Start" -> 시작인 경우 마지막 행에서 1이 반환되는 것을 방지합니다.
3. :StartEnd == "Start" & Lag(:StartEnd, -1) == "End" -> Start와 End 사이에 행이 없는 경우 1과 2가 반환되는 것을 방지합니다.
일부 비교를 약간 이동하여 여러 비교가 있는 경우 하나만 사용할 수 있습니다(이것은 Req1과 동일한 결과를 반환하는 것처럼 보였습니다).
If(
Row() == 1, val = .,
Row() != Col Max(Row()) & :StartEnd == "Start" & Lag(:StartEnd, -1) != "End", val = 1,
Is Missing(:StartEnd) & Lag(:StartEnd) != "End" | :StartEnd == "End", val += 1,
val =.
)
설명이 너무 지저분하지 않았으면 좋겠습니다
Re: 다른 열의 일부 패턴을 기반으로 두 개의 열을 생성하려고 합니다.안녕하세요 여러분,
또 다른 쿼리가 있습니다. 실제로는 두 가지입니다.
1. 단일 "If" 문에 둘 이상의 조건을 추가하는 것과 단일 조건에 둘 이상의 "If" 문을 추가하는 경우 차이점은 무엇입니까? 첨부된 이미지를 참고하세요 - . 첫 번째 경우는 올바른 결과를 제공하지 않지만 두 번째 경우는 제대로 작동합니다. 결과는 첨부된 샘플 데이터에서 확인하실 수 있습니다. 여기서 차이점을 이해하는 데 어려움을 겪고 있습니다.
나에게는 각 행에 대한 것 같습니다. 첫 번째 경우 조건이 true이면 출력이 제공됩니다. 이것으로 결과가 종료됩니다.
두 번째 경우에는 이전 결과에 관계없이 3개의 if 문을 모두 순차적으로 실행하고 출력은 마지막 참 조건을 기반으로 합니다. 제가 제대로 설명할 수 있는지 잘 모르겠습니다. 다시 말하지만, 두 번째 경우(다중 if 문)에는 이전 If 문에 일종의 덮어쓰기가 있는 것 같습니다!

2. 위 수식에는 " Row() == Col Max(Row()) & :StartEnd == "Start" "라는 조건이 사용됩니다. 어떻게 작동하나요? 잘 작동한다는 것은 잘 쓰여졌다는 뜻입니다. 하지만 변수/카운터 "val"이 어떻게 중지되는지 시각화할 수 없습니까?
도움이 필요하세요?
감사해요,
Re: 다른 열의 일부 패턴을 기반으로 두 개의 열을 생성하려고 합니다.~에게 @jthi (Jarmo) 그리고 친애하는 @txnelson (짐),
여러분의 지원과 친절에 정말 감사드립니다.
나는 확실히 이 두 가지 방법 중 하나와 이 두 가지 방법을 조합하여 하나의 작업 방법을 찾을 것입니다.
두 분 모두에게 다시 한 번 깊은 감사를 드립니다.
즐거운 성탄절 보내시고 새해 복 많이 받으세요. 당신의 시간을 즐길 수.
친애하는,
괴롭히다
Re: 다른 열의 일부 패턴을 기반으로 두 개의 열을 생성하려고 합니다.나는 이것을 시도했다. 가능하면 Lag() 사용을 피하고 Col 함수로 대체하려고 합니다. 가장 어려운 공식은 다음과 같습니다. 필수 열 1 그리고 Lag()를 사용하지 않고는 좋은 공식을 빨리 알아낼 수 없었습니다(어떻게든 Col Cumulative Sum을 사용하는 솔루션이 있을 가능성이 높습니다). 한 가지 아이디어는 시작과 끝 사이를 "진행 중" 또는 이와 유사한 것으로 채우는 것입니다. 그런 다음 Col Cumulative Sum을 더 쉽게 사용할 수 있지만 가장 어려운 공식은 다음으로 이동할 가능성이 높습니다. 시작과 끝 .
더보기... 시간이 있다면 이 문제를 해결하는 두 가지 방법을 모두 테스트해 보시기 바랍니다. @txnelson Lag 및 비교를 더 많이 사용했으며 Col 수식과 함께 사용했습니다. 둘 다 확실히 각자의 사용 사례가 있으며 이를 이해하면 장기적으로 JMP에서 공식/계산을 작성할 때 도움이 됩니다. 그리고 어떤 경우에는 두 가지를 결합하는 방법을 이해하면 공식만으로 매우 어려운 작업을 해결할 수 있습니다.
또한 논리가 작동하게 된 후에는 데이터 테이블에서 수식을 제거할 가능성이 높습니다(또는 Formula()를 스크립트의 << Set Each 값으로 대체). 데이터 테이블에서 순서가 변경되면 중단될 가능성이 높기 때문입니다.
Re: 다른 열의 일부 패턴을 기반으로 두 개의 열을 생성하려고 합니다.감사합니다 @txnelson ,
나는 약간의 진전을 이루었고 각 세트의 시작과 끝 지점을 정확하게 식별했습니다. 저는 매우 간단한 논리를 사용했습니다. 수식 열에서 볼 수 있습니다.
하지만 지금은 "시작"과 "끝" 지점의 각 쌍 사이에 숫자를 입력하는 데 어려움을 겪고 있습니다. "끝"에서 카운터를 중지하는 데 문제가 있습니다. 내 문제는 동일한 복잡성을 가질 수 있지만 적어도 지금은 시작 및 끝 지점에 표시/태그를 지우고 있습니다.
도움이 필요하세요?
감사해요.

감사해요.
Re: 다른 열의 일부 패턴을 기반으로 두 개의 열을 생성하려고 합니다.문제는 JSL 변수 "other"에 적용되는 논리에 있는 것 같습니다.오늘은 그 문제를 처리할 시간이 없지만, 내일 오후에는 조사를 좀 할 수 있을 것 같습니다.
Re: 다른 열의 일부 패턴을 기반으로 두 개의 열을 생성하려고 합니다.안녕하세요 짐,
혼란을 드려 죄송합니다.
귀하의 원래 공식(내 생각엔 그것을 엉망으로 만들지 않았다고 생각합니다)은 대부분의 경우에 효과가 있었지만 전체 데이터 세트에서 몇 가지 잘못된 점을 포착하고 몇 가지를 놓쳤습니다. 첨부된 데이터 하위 집합(하나의 "ID"와 하나의 "하위 집합" 값에만 해당)에는 잘못된 점이 거의 없는 수식을 기반으로 하는 열이 있습니다.
행: 647-649 잘못된 항목(빨간색)
행: 868-937 캡처되지 않음(빨간색)
행: 1307-1311 잘못된 항목(빨간색)
그리고 이것은 :Occurrence에 조건을 적용했을 때 수정되었습니다.
지금 나는 찾고 있다 -
1. 발생하는 마지막 기본 센서 = n(예: n = 2), "시작"으로 표시
2. 발생의 첫 번째 기본 센서 = n+1(= 3), n = 3에 대한 기본 센서가 없는 경우 발생 = n+2 == 4의 값을 중지/표시해야 합니다. "끝"으로 표시하세요.
3. 마지막으로 새 열에 "시작"과 "끝" 사이의 숫자를 채웁니다.
(아마도) 생각하는 다른 방법 -
단일 발생 n(n = 2)에서 첫 번째 기본 센서를 END로 표시하고 마지막 기본 센서를 시작으로 표시한 다음 새 열에 시작과 끝 사이의 값을 채울 수 있습니다.
이것이 도움이 되고 상황을 명확하게 해주기를 바랍니다.
감사해요,
내가 찾을 수 있다면 이것이 될 수 있다고 생각합니다.
Re: 다른 열의 일부 패턴을 기반으로 두 개의 열을 생성하려고 합니다.나는 혼란스럽다.내가 볼 때 내가 작성한 스크립트는 작동하는 것 같습니다. 단, 데이터 테이블의 44행 이후에 규칙을 변경했으며 이제 End가 Primary의 다음 값 이전 행에 있도록 하려고 합니다.당신이 원하는 것은 무엇입니까?

Re: 다른 열의 일부 패턴을 기반으로 두 개의 열을 생성하려고 합니다.안녕 @txnelson , 귀하의 응답에 감사드립니다.
올바른(업데이트된 요구 사항) 시작 지점을 얻을 수 없습니다. 데이터 테이블("업데이트된 샘플 데이터") 및 이미지에서 수정된 데이터 열을 수동으로 입력했습니다.
공식. 나는 "Required Column 1 Old"와 "Required Column 2 Old"를 얻었습니다.
RCValue = "";
:Required Column 1[Row()] = .;
If( :Occurrence != Lag( Occurrence, -1 ),
other = "Yes"
);
If( Row() == 1 | :ID != Lag( :ID ) | :"Sub-set"n != Lag( :"Sub-set"n ),
counter = 0;
withinStart = "No";
other = "Yes";
);
If(
:Sensor == "Primary" & :Occurrence == Lag( :Occurrence, -1 ) & Dif( :Occurrence ) == 0 &
withinStart == "Yes",
RCValue = "End";
withinStart = "No";
other = "No";,
:Occurrence != Lag( Occurrence, -1 ) & Lag( :Sensor, -1 ) != "Primary" & withinStart == "No"
& other == "Yes" & Row() != N Rows( Current Data Table() ),
withinStart = "Yes";
counter = counter + 1;
RCValue = "Start";
);
If( withinStart == "Yes" | RCValue == "End",
:Required Column 1[Row()] = counter
);
RCValue;

많은 감사를 드립니다.
Re: 다른 열의 일부 패턴을 기반으로 두 개의 열을 생성하려고 합니다.가장 최근 응답에서 제공한 결과를 얻기 위해 이전에 제공한 코드를 수정했습니다. 샘플 데이터 테이블에 표시되는 결과를 얻기 위해 사용 중인 JSL을 제공하십시오.
Re: 다른 열의 일부 패턴을 기반으로 두 개의 열을 생성하려고 합니다.안녕 @txnelson 그리고 다,
내 요구 사항에 맞게 완벽하게 코드를 수정할 수 있었습니다. 하지만 2단계 문제 해결에서는 다음과 같은 것이 필요합니다.
Mark :Sensor = :Occurrence의 연속적인 변화에 대해 "1차"(1차).주어진 스크린샷에서 -
사이에 필요한 값 --- 마지막 "기본" ~에 발생 = 2 그리고 첫 번째 "기본" ~에 발생 = 3 [발생의 연속적인 변화]
첫 번째 프라이머리를 찾는 것은 그다지 어렵지 않습니다. 마지막 프라이머리를 찾는 방법을 모르시나요? 발생 = 2에 대한 하위 집합 데이터를 어떻게든 반전(내림차순)하려고 생각하고 값을 찾은 다음 다시 되돌립니다. 수식을 넣을 수 없습니다 !! 다른 방법은 없나요?
도움이 필요하세요?
감사해요.

Re: 다른 열의 일부 패턴을 기반으로 두 개의 열을 생성하려고 합니다.안녕 @txnelson ,
거의 잘못된 항목이 거의 발생하지 않았습니다. :Occurrence 열에 추가 조건을 추가해야 한다고 생각합니다. 즉, 발생은 set :Required Column 2 == "Start"로 변경되어야 합니다(그리고 옵션일 수도 있습니다. :Required Column 2 == "End"인 경우에도 동일해야 합니다).
- Dif(:Occurrence) !=0 다음과 같은 것 :필수 열 2 == "시작"
내 샘플 데이터(95개 행)의 경우 수식에는 문제가 없었지만 300,000개가 넘는 행이 있는 실제 데이터에는 아래와 같이 잘못된 항목이 많이 제공됩니다. (:발생에 대한 추가 요구 사항이 추가되면 괜찮을 것이라고 생각합니다. ) 이것은 잘못된 항목에 대한 일회성 스크린샷일 뿐입니다.

바랍니다!!수식/코드를 수정하고 :발생 요구 사항을 추가할 수 있습니다. 당신의 공식 위에.
귀하의 지원에 다시 한번 감사드립니다.
Re: 다른 열의 일부 패턴을 기반으로 두 개의 열을 생성하려고 합니다.필수열 2에서 참조하는 열에 대한 수식은 다음과 같습니다.코드를 연구하면 시작 및 종료 값을 결정할 때 확인해야 하는 논리 규칙을 적용하는 작업만 수행된다는 것을 알 수 있습니다.여기에는 필수 열 1 열의 값 설정도 포함되어 있습니다. 이 수식을 실행하려면 필수 열 1과 필수 열 2를 생성하기만 하면 됩니다. 필수 열 2를 문자 열로 설정하세요.그런 다음 필수 열 2의 수식을 열고 아래 수식을 열에 복사합니다.

RCValue = "";
:Required Column 1[Row()] = .;
If( :Sensor != "Primary",
other = "Yes"
);
If( Row() == 1 | :ID != Lag( :ID ) | :"Sub-set"n != Lag( :"Sub-set"n ),
counter = 0;
withinStart = "No";
other = "Yes";
);
If(
:Sensor == "Primary" & withinStart == "Yes",
RCValue = "End";
withinStart = "No";
other = "No";,
:Sensor == "Primary" & Lag( :Sensor, -1 ) != "Primary" & withinStart == "No" & other == "Yes" & Row() !=
N Rows( Current Data Table() ),
withinStart = "Yes";
counter = counter + 1;
RCValue = "Start";
);
If( withinStart == "Yes" | RCValue == "End",
:Required Column 1[Row()] = counter
);
RCValue;