조건부 수식다른 열에 조건부로 적용되는 열 수식을 추가하려고 합니다. "결과" 열이 "시간"에 대해 여러 값이 있는 "주제" 및 "제품"으로 누적된 데이터가 있습니다. 저는 다음과 같이 "결과"의 각 값에 대한 기준을 계산하려고 합니다.
새 열 = "결과" – [특정 주제/제품 조합에 대해 시간=(1)인 경우 "결과" 값]
감사합니다
자동화 및 스크립팅답: 조건식데이터의 예를 들어주실 수 있나요?그러면 적절한 해결책을 찾는 데 도움이 될 것입니다.
답: 조건식데이터가 제목, 제품, 시간별로 정렬되어 있으면 이 예가 작동합니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/big class.jmp" );
dt:age << set name( "Subject" );
dt:sex << set name( "Product" );
dt:weight << set name( "Results" );
dt << New Column( "baseline",
formula(
If( Row() == 1,
valueTime1 = :Results,
If( :Subject != Lag( :subject ) | :Product != Lag( :product ),
valueTime1 = :Results
)
);
baseline = :Results - valueTime1;
)
);답: 조건식샘플 데이터를 포함시켰습니다. 수식이 각 주제/제품 조합에 대한 시간(-5) 결과 값을 취하고 주제/제품 조합의 각 결과에서 해당 값을 빼는 새 열을 추가해야 합니다.
답: 조건식때로는 열 수식에 대해 복잡한 jsl을 작성하는 것보다 여러 단계를 거쳐 이와 같은 문제를 해결하는 것이 더 쉽습니다. 다음은 "하위 집합"을 사용하여 Time=-5 행을 추출하고 "업데이트"를 사용하여 원래 데이터 테이블에 다시 결합한 다음 열 수식에서 간단한 빼기를 수행하는 접근 방식입니다. JMP 17을 실행하고 있다면 작업 흐름은 이런 종류의 작업을 구축하고 공유할 수 있는 좋은 방법입니다.
답: 조건식내가 생각해낸 JSL은 그리 복잡하지 않습니다.나는 수식을 작성하지 않고 테이블 스크립트를 작성했습니다.더 많은 데이터를 추가할 때마다 이 작업을 실행할 수 있습니다.
dt = Current Data Table();
OffsetArray = Associative Array();
TimeRows = dt << Get Rows Where( :Time == -5 );
For Each( {val, idx}, TimeRows, OffsetArray[:Subject[val] || :Product[val]] = :Results[val] );
For Each Row( dt, :New Column = :Results - OffsetArray[:Subject || :Product] );편집하다
테이블을 더 자세히 살펴본 후 일부 :Results 셀에서 누락된 값을 발견했습니다.이를 0으로 다시 코딩하거나 스크립트를 약간 변경해야 합니다.
dt = Current Data Table();
OffsetArray = Associative Array();
TimeRows = dt << Get Rows Where( :Time == -5 );
For Each( {val, idx}, TimeRows, OffsetArray[:Subject[val] || :Product[val]] = If( !Is Missing( :Results[val] ), :Results[val], 0 ) );
For Each Row( dt, :Results with Offset = :Results - OffsetArray[:Subject || :Product] );
답: 조건식테스트할 데이터가 없기 때문에 추측일 뿐입니다.
:Result - Col Min(If(:Time == 1, :Result, .), :Group);
편집하다:
샘플 데이터를 받은 후 수식을 업데이트했습니다.
:Results - Col Min(If(:Time == -5, :Results, .), :Subject, :Product)