"where" 조건과 함께 Col Maximum Formula를 사용하는 방법안녕하세요, 다른 모든 국가에 대한 벤치마크로 새 열을 공식화하려는 문제가 있습니다. 국가에 대한 행이 더 있는 경우 최대 값을 벤치마크로 사용하고 싶습니다. 자세한 내용은 아래 예를 참조하십시오.
데이터 종류는 다음과 같습니다.
국가 가치 기간
10 201301
30 201301
B 20 201301
C 50 201301
D 40 201301
달성하려는 것(셀 수식 사용): Col Maximum(:값, :기간, :국가) 여기서 :국가 == "A"
산출:
국가 가치 기간 벤치마크
A 10 201301 30
A 30 201301 30
B 20 201301 30
C 50 201301 30
D 40 201301 30
보시다시피 저는 국가 A만의 최대값을 벤치마킹하고 싶습니다.
Col Maximum(:value, :period, :country == "A")을 시도했는데 "50"이 반환됩니다.
Col Maximum(:value, :period, :country) 및 Col Maximum(:value, :period, :country == "A") 모두 "50"을 반환합니다.
나는 이것에 대한 간단한 해결책이 있다고 확신합니다!
너희들이 도울 수 있기를 바란다!
감사 감사!
Re: "where" 조건과 함께 Col Maximum Formula를 사용하려면 어떻게 해야 합니까?감사해요.Re: "where" 조건과 함께 Col Maximum Formula를 사용하려면 어떻게 해야 합니까?Col Maximum()은 행당 분리 결과가 출력인 수식에서만 실행 가능합니다.원하는 작업을 수행하려면 Summarize() 함수를 사용하십시오.
보다:
도움말==>스크립팅 인덱스==>요약
Re: "where" 조건과 함께 Col Maximum Formula를 사용하려면 어떻게 해야 합니까?안녕 마크,
연령별, 성별별 최대 체중을 얻으려고 했으나 다음 스크립트에서는 하나의 값만 출력합니다.
연령별로 6개의 다른 연령이 있었고, 각각에 대해 각 연령에 대한 최대 체중을 계산하고 싶습니다.
Names Default To Here( 1 );
Clear Log();
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
max_weight_by_age = Col Max( :weight, :age );
max_weight_by_sex = Col Max( :weight, :sex );
Re: "where" 조건과 함께 Col Maximum Formula를 사용하려면 어떻게 해야 합니까?Big Class 예제 데이터 테이블의 새 열에 이 수식을 추가할 수 있습니다.
Col Max( :weight, :age )
Re: "where" 조건과 함께 Col Maximum Formula를 사용하려면 어떻게 해야 합니까?안녕 마크,
col Max를 사용할 때 를 어떻게 사용하는지 예를 들어주실 수 있나요?
감사해요.Re: "where" 조건과 함께 Col Maximum Formula를 사용하려면 어떻게 해야 합니까?도움말 > 스크립팅 인덱스 > 함수를 참조하십시오.

Re: "where" 조건과 함께 Col Maximum Formula를 사용하려면 어떻게 해야 합니까?Jim에게 감사합니다. 저는 요약만을 의미했습니다. 내가 하는 방법은 다음과 같습니다(두 개의 jsl 명령).
열을 요약하고 값(최소/최대/또는 열에 대한 다른 통계)이 있는 새 테이블을 만듭니다.
그런 다음 행 항목을 일치시켜 요약된 테이블을 사용하여 기본 테이블을 업데이트합니다.
고유한 열 값을 식별하고 이 추가 단계의 필요성을 제거할 수 있는 Max col() 명령에 조건부 옵션이 있는지 궁금합니다. (추가 테이블과 2개의 추가 단계를 제거합니다).
당신의 도움을 주셔서 감사합니다.
Re: "where" 조건과 함께 Col Maximum Formula를 사용하려면 어떻게 해야 합니까?저는 일반적으로 Summary Platform이 아닌 Summarize() 함수를 사용하여 열 내에서 발견된 수준을 쉽게 결정합니다.그런 다음 거기에서 작업을 완료하는 데 필요한 공식을 생성하기만 하면 됩니다.
Re: "where" 조건과 함께 Col Maximum Formula를 사용하려면 어떻게 해야 합니까?국가 열에 여러 이름이 있고 가능한 모든 값을 알지 못한다고 가정합니다. 이를 위해 이 쿼리를 어떻게 조정할 수 있습니까?
요약 테이블을 생성한 다음 테이블을 다시 업데이트하여 수행할 수 있지만 비효율적인 방법인 것 같아서 이렇게 한 단계로 수행할 수 있는지 궁금했습니다.
미리 감사드립니다.
Re: "where" 조건과 함께 Col Maximum Formula를 사용하려면 어떻게 해야 합니까?늦은 답변 죄송합니다! 솔루션 주셔서 감사합니다!Re: "where" 조건과 함께 Col Maximum Formula를 사용하려면 어떻게 해야 합니까?귀하의 요구 사항을 언급한 방식을 감안할 때 여러 항목이 있는 국가를 알고 있다고 가정합니다.
dt = Current Data Table();
rowperiod = :Period[Row()];
Max(
:Value[dt << get rows where(
:Country == "A" & :period == rowperiod
)]
);
Re: "where" 조건과 함께 Col 최대 수식을 사용하려면 어떻게 해야 합니까?
@호기 쓴 :거기에 한 줄 명령 평균 계산에서 여성을 제거하지만 "여성"으로 각 행에 값을 쓰려면?
즉, 다음과 같습니다.
Col Mean( :weight, :age, where( :sex == "M" ) )
?
Re: "where" 조건과 함께 Col 최대 수식을 사용하려면 어떻게 해야 합니까?방정식의 :weight 열에 If()를 적용합니다.

col Mean( if(:sex=="M", :weight,.), :age)
Re: "where" 조건과 함께 Col 최대 수식을 사용하려면 어떻게 해야 합니까?환상적입니다!
그래서 논리 - 당신이 그것을 볼 때!
이 솔루션을 스스로 찾지 못한 제 자신에게 매우 실망했습니다.
Re: "where" 조건과 함께 Col Maximum 공식을 사용하는 방법음, 어느 정도 열정이 생긴 뒤에 조금은 지쳐버렸어요.
Col Aggregation 내부의 if가 매우 느리게 만드는 듯합니다. 특히 if 내부에 문자 비교가 있는 경우, 그리고 특히 char(num) 변환이 있는 경우 x 2입니다. 그러면 테이블 크기가 증가함에 따라 시간 스케일이 ~2차로 증가합니다.
좋은 점: Col Median (내가 가장 자주 사용하는 것)은 이 "버그"의 영향을 받지 않습니다.:)
Col Min, max, mean...에 대한 쉬운 해결책이 있습니까?
그렇지 않다면 where 조건을 사용하여 Col xyz를 계산하는 공식적인 방법을 구현하고자 하는 바람을 적어보겠습니다.
데이터 세트를 먼저 줄인 다음( where ) 집계하고( Col xyz ) 각 행에 값을 분산하면 훨씬 더 빨라질 것입니다.

더 보기...Names Default To Here( 1 );
If( Is Empty( mydt ),
mydt = Open( "$SAMPLE_DATA/Big Class.jmp" )
);
trialRun = 0;
tryAgain = Function( {},
trialRun += 1;
Rownumbers = N Rows( mydt );
t1 = HP Time();
mydt << New Column( "col A", Formula( Col Mean( :weight ), :sex ) );
t2 = HP Time();
mydt << New Column( "col B", Formula( Col Mean( If( :age == 12, :weight, . ), :sex ) ) );
t3 = HP Time();
mydt << New Column( "col C", Formula( Col Mean( If( :sex == "M", :weight, . ), :age ) ) );
t4 = HP Time();
mydt << New Column( "col D", Formula( Col Mean( If( Char( :age ) == "12", :weight, . ), :age ) ) );
t5 = HP Time();
mydt << New Column( "col E", Formula( Char( :age ) == "12" ) );
t6 = HP Time();
tt1 = Round( (t2 - t1) / 1000000, 4 );
tt2 = Round( (t3 - t2) / 1000000, 4 );
tt3 = Round( (t4 - t3) / 1000000, 4 );
tt4 = Round( (t5 - t4) / 1000000, 4 );
tt5 = Round( (t6 - t5) / 1000000, 6 );
If( trialRun == 1,
tt1Ref = tt1;
tt2Ref = tt2;
tt3Ref = tt3;
tt4Ref = tt4;
tt5Ref = tt5;
RNref = Rownumbers;
);
tr1 = Round( tt1 / tt1Ref );
tr2 = Round( tt2 / tt2Ref );
tr3 = Round( tt3 / tt3Ref );
tr4 = Round( tt4 / tt4Ref );
tr5 = Round( tt5 / tt5Ref );
RNratio = Round( RowNumbers / RNref );
Wait( 0.1 );
Try( mydt << delete columns( "col A", "col B", "col C", "col D", "col E" ) );
Wait( 0.1 );
mydt = mydt << Concatenate( mydt, mydt, mydt );
Wait( 0.1 );
If(
ex = New Window( "results",
<<TYPE></TYPE></CODE><NOSCRIPT><CODE class=" language-jsl"><DIV class="lia-spoiler-noscript-container"><DIV class="lia-spoiler-noscript-content">이름은 Here( 1 ); If( Is Empty( mydt ), mydt = Open( "$SAMPLE_DATA/Big Class.jmp" ) ); trialRun = 0; tryAgain = Function( {}, trialRun += 1; 행 번호 = N 행( mydt ); t1 = HP 시간(); mydt << 새 열( "col A", 수식( 열 평균( :체중), :성별 ) ); t2 = HP 시간(); mydt << 새 열( "col B", 수식( 열 평균( If( :age == 12, :체중, . ), :성별 ) ) ); t3 = HP 시간(); mydt << 새 열( "col C", 수식( 열 평균( If( :성별 == "M", :체중, . ), :age ) ) ); t4 = HP 시간(); mydt << 새 열( "col D", 수식( 열 평균( If( Char( :age ) == "12", :체중, . ), :age ) ) ); t5 = HP 시간(); mydt << 새 열( "col E", 수식( Char( :age ) == "12" ) ); t6 = HP 시간(); tt1 = 라운드( (t2 - t1) / 1000000, 4 ); tt2 = 라운드( (t3 - t2) / 1000000, 4 ); tt3 = 라운드( (t4 - t3) / 1000000, 4 ); tt4 = 라운드( (t5 - t4) / 1000000, 4 ); tt5 = 라운드( (t6 - t5) / 1000000, 6 ); If( trialRun == 1, tt1Ref = tt1; tt2Ref = tt2; tt3Ref = tt3; tt4Ref = tt4; tt5Ref = tt5; RNref = 행 번호; ); tr1 = Round( tt1 / tt1Ref ); tr2 = Round( tt2 / tt2Ref ); tr3 = Round( tt3 / tt3Ref ); tr4 = Round( tt4 / tt4Ref ); tr5 = Round( tt5 / tt5Ref ); RNratio = Round( 행 번호 / RNref ); Wait( 0.1 ); Try( mydt << delete columns( "col A", "col B", "col C", "col D", "col E" ) ); Wait( 0.1 ); mydt = mydt << Concatenate( mydt, mydt, mydt ); Wait( 0.1 ); If( ex = New Window( "results", < <TYPE></TYPE></DIV></DIV>
In a previous version I had "ms" in the table instead of seconds. Unfortunately, it's 1000x more severe ...
Re: "where" 조건과 함께 Col Maximum Formula를 사용하려면 어떻게 해야 합니까?흥미로운 질문 - 답변을 기다리고 있습니까?
제한하는 방법과 유사한 질문이 있는 일련의 게시물이 있습니다. 열 ... 집계 특정 하위 집합에 대한 기능.
(주로: 제외되지 않은 행의 하위 집합으로 제한)
사용된 관찰을 제한하면서 열 평균 계산
JMP10: Col Max() 및 Col Min() 함수가 제외된 행의 데이터를 반환했습니다.
Col 함수 및 행 상태
아이디어:
평균 키에 관심이 있는 경우 모든 행을 집계하거나 남성 항목과 여성 항목을 개별적으로 집계할 수 있습니다.
두 번째 솔루션은 첫 번째 솔루션만큼 쉽습니다. 추가 GroupBy 변수를 사용하여 원하는 데이터와 원하지 않는 데이터를 분할하기만 하면 됩니다.
그러나 사용자가 추가로 자주 필요로 하는 것: 값은 모든 해당 행에 표시되어야 합니다(예: 여성의 경우도 해당).
[원래 게시물의 벤치마크 열이 있는 예는 그러한 동작이 의미가 있는 이유를 보여줍니다.]
GroupBy를 사용하면 올바른 값을 쉽게 얻을 수 있지만 이를 모든 행에 배포하는 방법은 무엇입니까?
뒤에 룩업 테이블 같은 것이 있다면 열 ... 집계 함수는 동일한 식별자를 사용합니다.
1) 집계를 위해 행을 다른 그룹으로 분할("M" / "F"):
Judy는 여성이므로 Judy의 행에 있는 체중은 다음에 포함되어야 합니다. 여성 평균 체중
2) 조회 테이블("M" / "F")에서 항목을 읽을 때 색인으로 사용:
Judy는 여성이므로 새 열에 다음이 포함되어야 합니다. 여성 평균 체중 주디의 행에서
따라서 남성과 여성은 식별자가 동일하기 때문에(mean1) 동일한 값을 얻거나 식별자가 다르기 때문에(mean2) 서로 다른 값을 얻습니다.
그래서:
JMP 사용자 ~할 수 있다 GroupBy 기능을 사용하여 다음을 통해 계산에서 값을 제거합니다.
- 계산하다 하위 그룹마다 다른 값
- 원하지 않는 결과 덤프
그러나 그는 얻는다
- 얻다 하위 그룹마다 다른 값
무료로 - 그가 이 옵션을 주문하지 않았더라도(좋아, 코드는 다른 이야기를 말하지만 사용자가 원하는 것이 무엇인지 생각해 봅시다) 
거기에 한 줄 명령 평균 계산에서 여성을 제거하지만 "여성"으로 각 행에 값을 쓰려면?
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << New Column("mean1", Formula(Col Mean(:weight, :age)));
dt << New Column("mean2", Formula(Col Mean(:weight, :age, :sex)));
dt << New Column("mean2", Formula(If(:sex=="M", Col Mean(:weight, :age, :sex))));
dtM = dt << subset( Rows( dt << get rows where( :sex== "M" ) ), selected columns( 0 ));
dtM << New Column("mean_M", Formula(Col Mean(:weight, :age)));
dt << Update(
With( dtM ),
Match Columns(:age = :age ),
Add Columns from Update Table( :mean_M ),
Replace Columns in Main Table( None )
);
Re: "where" 조건과 함께 Col Maximum Formula를 사용하려면 어떻게 해야 합니까?속도를 높이는 접근 방식 수십 배 (!!!):
매우 느린 Col Mean 대신 if 문 내부의 문자 비교 :
mydt << New Column( "col C", Formula( Col Mean( If( :name=="Robert", :weight, . ), :age ) ) );
사용 @cwillden 트릭: 비교를 GroupBy 인수로 사용:
해결됨: Re: 열 수식 내의 조건을 충족하는 행 가져오기 - JMP 사용자 커뮤니티
mydt << New Column( "col C", Formula(if(:name=="Robert" , Col Mean( :weight, :age, :name=="Robert" ),. ) );
원하는 데이터와 원하지 않는 데이터의 두 그룹으로 데이터 분할
.. 그런 다음 Col Mean 집계 외부의 if 문을 통해 원하지 않는 결과를 제거합니다.
열에 대한 비교 :섹스 이 접근 방식은 과도하게 설계되었습니다. 이것이 내가 :이름 개념을 설명하기 위해 비교.
이것은 또한 일종의 과잉 엔지니어링이지만 아이디어가 명확해지기를 바랍니다. 

더보기...
Re: "where" 조건과 함께 Col Maximum Formula를 사용하려면 어떻게 해야 합니까?방금 알아차렸습니다:
- 트릭이 작동하지 않습니다
:이름=="로버트"
특별한 경우인 것 같습니다. 비교는 무시됩니다(Jmp 16 및 17.1에서).
이상한 ...
- 새로운 가능성(조건(!)을 GroupBy로 사용)과 속도 향상에 대한 모든 열정으로 저는 제가 시작한 곳인 Group By 옵션이 있는 Col 집계로 돌아왔다는 사실을 완전히 놓쳤습니다.
그래서 실제 목표에 도달하지 못했습니다. 즉, 여기에 설명된 대로 "다른" 행을 값으로 채우는 것입니다.
quot-where-quot/mp/571889/highlight/true#M78145와 함께 Col-Maximum-Formula를 사용하는 방법
그러나 해결 방법이 있습니다.
New Column( "newcol", Formula(Col Mean( if(:sex=="M",:weight,.), :age ) ));
느린 Col Mean 내부에 Group By 옵션만 있는지 확인하십시오.
... 그런 다음 빠른 Col Median을 사용하여 값을 다른 행에 분산시킵니다.
New Column( "newcol", Formula(Col Median(If(:sex =="M" ,Col Mean( :weight, :age, :sex),.),:age) ));
또한 이 주제는 Jmp 개발 팀의 관심을 끌었습니다.
열 중앙값(및 기타): "위치" 옵션 추가
@샘가드너 쓴 :
상태가 다음으로 변경됨: 우리는 그것을 좋아한다! (대기열에서)... 우리는 JMP 전체에서 Where( ) 절이 사용되는 방식을 개선하기 위해 노력하고 있습니다.
곧 문제에 대한 훨씬 쉬운 해결책이 있을 것 같습니다 
Re: "where" 조건과 함께 Col Maximum 공식을 사용하는 방법재밌는 사실:
문자열 목록에서 "M"을 검색하는 것은 "M"을 문자열과 비교하는 것보다 훨씬 빠릅니다.

Names Default To Here( 1 );
If( Is Empty( mydt ),
mydt = Open( "$SAMPLE_DATA/Big Class.jmp" )
);
tryAgain = Function( {},
write ("\!nrows: ", nrows(mydt),"\!n");
t0 = HP Time();
mydt << New Column( "char=char", Formula( Col Mean( If( :sex == "M", :weight, . ), :age ) ) );
t=(HP Time()- t0)/1000000;
write("char=char: ",t,"\!n");
t0 = HP Time();
mydt << New Column( "contains", Formula( Col Mean( If( contains(Eval List({:sex[]}) ,"M"), :weight, . ), :age ) ) );
t=(HP Time()- t0)/1000000;
write("contains: ",t,"\!n");
If(
ex = New Window( "",
<<TYPE></TYPE><BR />why?!?<BR />Which secret is behind this finding?
제목: "where" 조건과 함께 Col Maximum 공식을 사용하는 방법은 무엇인가요?2025년 JMP19는 현 비교 시 속도가 크게 향상되었습니다.
시원한!
그 외에도 제안된 사항은 다음과 같습니다.
col Mean(:weight, :age, where(not(excluded())))
보고서의 변환 열을 위해 도입되었습니다. 다음과 같이 간결해졌습니다.

반면에, 예를 들어 :sex="M" 으로 제한된 집계에 대한 올바른 공식을 얻는 것은 여전히 매우 어렵습니다.
<SPAN class="token function">if<SPAN class="token punctuation">(</SPAN><SPAN class="token punctuation">:</SPAN>sex<SPAN class="token operator">==</SPAN><SPAN class="token string">"M"& not(excluded()),<BR /></SPAN> col Max</SPAN><SPAN class="token punctuation">(</SPAN><SPAN> </SPAN><SPAN class="token function">if</SPAN><SPAN class="token punctuation">(</SPAN><SPAN class="token punctuation">:</SPAN>sex<SPAN class="token operator">==</SPAN><SPAN class="token string">"M"</SPAN><SPAN class="token punctuation">,</SPAN><SPAN> </SPAN><SPAN class="token punctuation">:</SPAN>weight<SPAN class="token punctuation">,</SPAN><SPAN class="token punctuation">.</SPAN><SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,</SPAN><SPAN> </SPAN><SPAN class="token punctuation">:</SPAN>age, excluded()<SPAN class="token punctuation">)<BR /> , .<BR />);</SPAN>
예를 들면
col Max(:weight, :age, @excluded, where(:sex=="M"))
많은 도움이 될 수 있습니다.
음: Col Median(및 기타): "위치" 옵션 추가 : 3년 반 동안 추천 1개라니?! 이상하네.