계산에서 감지된 주기JMP는 스프레드시트가 아니며 Excel에서 계산하는 것과 다르게 계산해야 할 수도 있지만 해결 방법을 알 수 없습니다.
변수가 자체적으로 의존하는 계산이 있는데 "데이터 열에 대해 감지된 주기" 오류가 발생합니다.
시간이 지남에 따라 솔루션이 추가되는 탱크가 있습니다. 추가한 양과 탱크의 총 부피를 알고 있습니다. 또한 샘플 시간에 탱크에서 볼륨을 꺼냅니다. 각 샘플 볼륨에서 제거되는 용액 A의 양을 계산해야 합니다. 그러나이 사이클 오류가 발생하지 않고 어떻게하는지 알 수 없습니다. 도와주세요!
New Column( "Soln A Removed in Current Draw (mL)",
Numeric,
"Continuous",
Formula(
:Name( "Soln A concentration before draw (mL/L)" ) * (
:Name( "Manually Recorded Sample Volume (mL)" ) / 1000)
),
);
New Column( "Soln A concentration before draw (mL/L)",
Numeric,
"Continuous",
Formula(
If(
(:Name( "Soln A added (mL)" )
/
:Name( "Culture Volume Pre-Drawdown (mL)" )
)
* 1000,
(
(
:Name( "Soln A added (mL)" )
-
Lag(
:Name( "Cumulative Soln A Removed (mL)" ), 1
)
)
/
:Name( "Culture Volume Pre-Drawdown (mL)" )
) * 1000
)
),
);
New Column( "Cumulative Soln A Removed (mL)",
Numeric,
"Continuous",
Formula(
Col Cumulative Sum(
:Name( "Soln A Removed in Current Draw (mL)" ),
:Batch Number
)
),
);
New Column( "Soln A added per current Tank Volume (mL/L)",
Numeric,
"Continuous",
Formula(
(:Name( "Soln A added (mL)" ) * 1000) /
:Name( "Culture Volume Pre-Drawdown (mL)" )
),
);고급 통계 모델링Re: 계산에서 주기가 감지되었습니다.문제는 "추출 전 용액 A 농도(mL/L)"에 대한 열 값이 항상 누락된 값으로 설정된 것으로 보입니다.JMP에서 두 값 중 하나가 누락된 값을 함께 추가하면 항상 누락된 값이 됩니다.....Sum() 함수를 사용하여 무시할 수 있습니다.다음은 변경 후 얻은 결과입니다.변경된 JSL은 다음과 같습니다.

Names Default To Here( 1 );
dt = Current Data Table();
dt << New Column( "Soln A Removed in Current Draw (mL)" );
dt << New Column( "Soln A concentration before draw (mL/L)" );
dt << New Column( "Cumulative Soln A Removed (mL)" );
dt << New Column( "Soln A added per current Tank Volume (mL/L)" );
For Each Row(
// Soln A added per current Tank Volume (mL/L)
:Name( "Soln A added per current Tank Volume (mL/L)" ) = (:Name( "Soln A added (mL)" ) * 1000) /
:Name( "Culture Volume Pre-Drawdown (mL)" );
// Soln A concentration before draw (mL/L)
If( :Name( "Soln A added (mL)" ) / :Name( "Culture Volume Pre-Drawdown (mL)" ) * 1000,
:Name( "Soln A concentration before draw (mL/L)" ) = Sum(
:Name( "Soln A added (mL)" ),
-1 * Lag( :Name( "Cumulative Soln A Removed (mL)" ) )
) / :Name( "Culture Volume Pre-Drawdown (mL)" ) * 1000
);
// Soln A Removed in Current Draw (mL)
:Name( "Soln A Removed in Current Draw (mL)" ) = :Name( "Soln A concentration before draw (mL/L)" ) * (
:Name( "Manually Recorded Sample Volume (mL)" ) / 1000);
// Cumulative Soln A Removed (mL)
curBatch = :Batch Number;
curRow = Row();
:Name( "Cumulative Soln A Removed (mL)" ) = Sum(
:Name( "Soln A Removed in Current Draw (mL)" )[dt << get rows where( :Batch Number == curBatch & Row() <= curRow )]
);
);
Re: 계산에서 주기가 감지되었습니다.약간 다른 테이블에서 방법을 시도했습니다(바흐 번호 열만 추가했지만 문제가 여전히 있는 것 같습니다. 오류 메시지 대신 빈 셀이 나타납니다. 변수가 마지막 값에 의존하도록 허용하는 해결 방법이 있습니까?
Names Default To Here( 1 );
dt = Current Data Table();
dt << New Column( "Soln A Removed in Current Draw (mL)" );
dt << New Column( "Soln A concentration before draw (mL/L)" );
dt << New Column( "Cumulative Soln A Removed (mL)" );
dt << New Column( "Soln A added per current Tank Volume (mL/L)" );
For Each Row(
// Soln A added per current Tank Volume (mL/L)
:Name( "Soln A added per current Tank Volume (mL/L)" ) = (:Name( "Soln A added (mL)" ) * 1000) /
:Name( "Culture Volume Pre-Drawdown (mL)" ) ;
// Soln A concentration before draw (mL/L)
If( :Name( "Soln A added (mL)" ) / :Name( "Culture Volume Pre-Drawdown (mL)" ) * 1000,
:Name( "Soln A concentration before draw (mL/L)" ) = :Name( "Soln A added (mL)" )
-Lag( :Name( "Cumulative Soln A Removed (mL)" ) ) / :Name( "Culture Volume Pre-Drawdown (mL)" ) *
1000
);
// Soln A Removed in Current Draw (mL)
:Name( "Soln A Removed in Current Draw (mL)" ) = :Name( "Soln A concentration before draw (mL/L)" ) *
(:Name( "Manually Recorded Sample Volume (mL)" ) / 1000);
// Cumulative Soln A Removed (mL)
curBatch = :Batch Number ;
curRow = Row();
:Name( "Cumulative Soln A Removed (mL)" ) = Sum(
:Name( "Soln A Removed in Current Draw (mL)" )[dt << get rows where(
:Batch Number == curBatch & Row() <= curRow
)]
);
);
Re: 계산에서 주기가 감지되었습니다.다음은 문제에 대한 다른 해석입니다.귀하가 제공한 데이터를 고려할 때 완전히 테스트할 수는 없지만 제가 취하는 접근 방식을 볼 수 있을 것이며 이를 바탕으로 구축할 수 있을 것입니다.
Names Default To Here( 1 );
dt = Current Data Table();
dt << New Column( "Soln A Removed in Current Draw (mL)" );
dt << New Column( "Soln A concentration before draw (mL/L)" );
dt << New Column( "Cumulative Soln A Removed (mL)" );
dt << New Column( "Soln A added per current Tank Volume (mL/L)" );
For Each Row(
// Soln A added per current Tank Volume (mL/L)
:Name( "Soln A added per current Tank Volume (mL/L)" ) = (:Name( "Soln A added (mL)" ) * 1000) /
:Name( "Culture Volume Pre-Drawdown (mL)" ) ;
// Soln A concentration before draw (mL/L)
If( :Name( "Soln A added (mL)" ) / :Name( "Culture Volume Pre-Drawdown (mL)" ) * 1000,
:Name( "Soln A concentration before draw (mL/L)" ) = :Name( "Soln A added (mL)" )
-Lag( :Name( "Cumulative Soln A Removed (mL)" ) ) / :Name( "Culture Volume Pre-Drawdown (mL)" ) *
1000
);
// Soln A Removed in Current Draw (mL)
:Name( "Soln A Removed in Current Draw (mL)" ) = :Name( "Soln A concentration before draw (mL/L)" ) *
(:Name( "Manually Recorded Sample Volume (mL)" ) / 1000);
// Cumulative Soln A Removed (mL)
curBatch = :Batch Number ;
curRow = Row();
:Name( "Cumulative Soln A Removed (mL)" ) = Sum(
:Name( "Soln A Removed in Current Draw (mL)" )[dt << get rows where(
:Batch Number == curBatch & Row() <= curRow
)]
);
);
Re: 계산에서 주기가 감지되었습니다.예, 제거된 양을 입력할 수 있다면 좋겠지만, 이전에 제거된 양에 의존하는 현재 농도를 기준으로 제거된 양만 알 수 있습니다.
Re: 계산에서 주기가 감지되었습니다.당신이 올바른지. JMP는 스프레드시트가 아닙니다.
JMP 데이터 테이블을 관측치 모음(예: 데이터 세트)으로 생각할 수 있습니다. 따라서 볼륨의 각 변경 사항은 새 행입니다. 따라서 추가 또는 제거된 볼륨을 나타내는 열 하나와 현재 볼륨을 나타내는 다른 열이 있을 수 있습니다.
첫 번째 열인 Solution A Removed in Current Draw는 계산된 값이 아니라 입력된 값이어야 한다고 생각합니다. 그러면 순환 참조가 중단될 수 있습니다. 아마도 마지막 열인 현재 그리기에 추가된 솔루션 A와 동일할 것입니다. 그에 따라 수식을 조정하십시오.