루프에 대한 JMP 스크립트의 문제안녕하세요, 두 가지 질문이 있습니다-
질문1 --
간단한 데이터(첨부)와 잘 작동하는 스크립트가 있지만 원하는 만큼 for 루프로 변환할 수 있습니다. 올바른 것을 얻지 못하고 있습니다.
AIM - 각 전류에 대해 상위 10% 저항 값을 원합니다. 내 데이터는 대칭이 아니며 각 전류에 대한 데이터 포인트 수가 다르다는 것을 의미합니다.
동일한 데이터에는 7개의 현재 값만 있고 실제 데이터에서는 100개의 값을 가질 수 있습니다.
접근법 -- Quantile 테이블을 생성한 다음 내 저항 값을 90% Quantile 값과 비교하고 추가 열 'Top10%'를 추가합니다. 현재 값이 7개인 샘플 데이터에 대해 모든 것이 잘 작동하지만 루프가 필요합니다. 슈퍼 사용자가 for 루프에서 내가 하고 있는 실수가 무엇인지 알려줄 수 있습니까? 이것은 for 루프를 구현하는 방법을 배우는 데 도움이 될 것입니다.?
도움이 필요하세요?
Ques2 --상위 95% 데이터를 얻는 가장 좋은 방법은 무엇입니까?
도움이 필요하세요?
고급 통계 모델링자동화 및 스크립팅데이터 탐색 및 시각화대량 맞춤화품질 및 프로세스 엔지니어링Re: 루프에 대한 JMP 스크립트의 문제깔끔하고 좋은 설명 감사합니다. 열 공식이 작동하는 방식을 배우는 데 매우 유용합니다. 다시 한번 감사드립니다.
Re: 루프에 대한 JMP 스크립트의 문제For() 루프 로직 관련
- 열에는 수식이 1개만 있을 수 있습니다.For() 루프 내에 수식 정의가 있으면 각 루프에 대해 다른 수식을 지정합니다.JMP가 정확히 무엇을 하는지는 모르겠지만 기껏해야 새 공식이 생성될 때 각 공식을 대체하고 마지막으로 생성된 공식만 남게 됩니다.
- 각 If 내에서 "실패" 값을 설정하면 논리가 정확해지는 유일한 시간은 마지막 수준이 현재 행의 수준인 경우입니다.그렇지 않으면 레벨 3이 주어진 행의 현재 레벨이라고 가정해 봅시다.JMP는 If 문에서 수준 1에 대한 값을 Fail로, 수준 2는 Fail로, 수준 3은 Top10%로 설정하지만 For() 루프가 계속 진행되므로 수준 4에 대한 테스트는 실패로 이어집니다.... .....그리고 나머지 모든 레벨.
- 공식 외부에서 정의된 변수 값이 있는 열에 대한 공식(예: dtF2, dtQ 및 dtQ 데이터 테이블의 열에 대한 참조)을 사용하면 해당 값과 데이터 테이블은 공식이 열립니다.따라서 이러한 수식을 사용할 때 해야 할 일은 데이터 테이블에서 수식을 실행한 후 수식을 삭제하는 것입니다.
dtF2:Name("Top10%") << delete formula;
여기에 제가 생각하기에 효과가 있다고 생각되는 공식의 버전이 있습니다..... 저는 그것을 테스트하지는 않았지만 접근 방식을 보게 될 것이라고 생각합니다.
dtF2 << New Column( "Top10%",
character,
FORMULA(
For( i = 1, N Rows( dtQ ), i++,
x = "";
If( dtF2:Current == dtQ:Level[i] & dtF2:Name( "Res" ) >= dtQ:Name( "90%" )[i],
x = "Top10"
);
);
If( x == "", x = "Fail" );
x;
)
);Re: 루프에 대한 JMP 스크립트의 문제네, 아주 좋습니다. 훨씬 더 좋고 간단한 방법입니다. 요약 테이블에서도 분위수를 얻을 수 있다는 것을 몰랐습니다. 말씀하신대로 시행하고 있습니다.
Quantile 및 상위 10% 데이터를 제외하고 내 "for 루프"에서 무엇이 잘못되었는지 의견이 있으십니까?
도와 주셔서 감사합니다.
Re: 루프에 대한 JMP 스크립트의 문제아래 스크립트는 원하는 결과를 얻는 더 간단한 방법론이라고 생각합니다.

Names Default To Here( 1 );
dtF2 = Data Table( "Final_Data" );
dtSum = dtF2 << Summary(
invisible,
Group( :Current ),
Quantiles( 90, :Res ),
Freq( "None" ),
Weight( "None" ),
statistics column name format( "stat" ),
link to original data table( 0 )
);
dtSum << delete columns( N Rows );
dtF2 << Update(
With( dtSum ),
Match Columns( :Current = :Current )
);
Close( dtSum, nosave );
dtF2 << New Column( "Top10%",
character,
formula( If( :Res >= :Quantiles90, "Top10" ) )
);