데이터 그룹 전체에서 최소값과 최대값을 식별하는 방법제가 Big Class의 모든 학생을 잡아서 성별과 나이에 따라 그룹을 나눈다고 가정해 보겠습니다. 예를 들어, 한 그룹에 12살 남자아이를, 다른 그룹에 12살 여자아이를 넣는 식으로요.
이 설정으로, 두 성별에 걸쳐 해당 그룹의 연령대별 최대 신장이 가장 작으면 1, 그렇지 않으면 0을 반환하는 수식 열을 만들고 싶습니다.
예를 들어, 이 데이터에서:
| 그룹 | 이름 | 키 | 새로운 칼럼 |
| 12세 소녀 | 케이티 | 59 | 0 |
| | 계집애 | 55 | 0 |
| | 잭린 | 66 | 0 |
| | 릴리 | 52 | 0 |
| 12세 소년 | 팀 | 60 | 1 |
| | 제임스 | 61 | 1 |
| | 로버트 | 51 | 1 |
여아의 최대 신장은 66세이고 남아의 최대 신장은 61세이므로 남아 그룹은 나이에 비해 최대 신장이 가장 작습니다. 따라서 새로운 수식 열에는 팀, 제임스, 로버트는 1이, 케이티, 루이스, 제인 등은 0이 표시됩니다.
이것이 수식 열에서 가능합니까?
(제가 시도한 것을 공유할 수 있지만, xyproblem을 피하려고 노력하고 있습니다. http://xyproblem.info 여기...)
기본 데이터 분석 및 모델링데이터 탐색 및 시각화Re: 데이터 그룹에서 최소값과 최대값을 식별하는 방법Col ... 집계를 사용할 수 있습니다.
편집: 만약 누군가가 연령대별로 키가 가장 작은 학생의 성별을 묻는다면:
먼저, Col Min을 사용하여 연령별 키가 가장 작은 학생을 찾습니다.
그런 다음 Col Max를 사용하여 이 지식을 같은 성별의 모든 학생들에게 전파하세요.
그래서:
New Column( "myCol",
Formula( Col Maximum( :height == Col Minimum( :height, :age ), :sex, :age ) ),
)
당신이 요청한대로
두 성별 모두에서 해당 그룹의 연령에 대한 최대 키가 가장 작은 경우 1 을, 그렇지 않은 경우 0을 갖는 수식 열
접근 방식을 수정해야 합니다.
New Column( "myCol",
Formula(
Col Maximum(
:height == Col Min( Col Maximum( :height, :age, :sex ), :age ),
:sex,
:age
)
)
)
다음과 같은 아이디어를 따라:
- 연령대와 성별에 따른 최대 신장은 얼마인가요?
- 값을 취하고 연령별 최소(최대) 키를 찾으세요.
- which student?
[아, 아니요. 우리는 무작위 학생을 원하는 것이 아니라, 키가 가장 큰 학생을 원하는 것입니다!]
-> replace :height with Col Maximum( :height, :age, :sex ) *) </CODE>use col max to spread the 1 to all other students with the same sex and age</STRIKE><BR /><STRIKE>키가 같은 남자아이와 여자아이가 있으면 다른 성을 0으로 설정하고, 키가 같은 남자아이와 여자아이가 있으면 1로 설정합니다.</STRIKE><BR /><FONT face="comic sans ms,sans-serif" color="#999999">이 부분은 더 이상 필요 없어</FONT><BR /><FONT face="comic sans ms,sans-serif" color="#999999">... 그리고 우리는 결국 Jarmo의 솔루션과 정확히 같은 결과를 얻었습니다(아래 참조)</FONT><BR /><BR /></LI></UL></LINGO-BODY><LINGO-SUB id="lingo-sub-821774" slang="en-US" mode="CREATE">Re: 데이터 그룹에서 최소값과 최대값을 식별하는 방법</LINGO-SUB><LINGO-BODY id="lingo-body-821774" slang="en-US" mode="CREATE"><P>XY 문제 :<BR /> 감사해요 : )</P></LINGO-BODY><LINGO-SUB id="lingo-sub-821776" slang="en-US" mode="CREATE">Re: 데이터 그룹에서 최소값과 최대값을 식별하는 방법</LINGO-SUB><LINGO-BODY id="lingo-body-821776" slang="en-US" mode="CREATE"><P>와, 효과가 있는 것 같네요. 하지만 제 머리로는 이게 어떻게 작동하는지 이해할 수 없네요...</P><P> </P><P>여기서 이를 풀어보도록 하겠습니다. 이해하도록 도와주실 수 있을까요?</P><P> </P><P>시작: Col Maximum( :height == Col Minimum( :height, :age ), :sex, :age )</P><P> </P><P>Col Minimum( :height, :age ) --> 이 연령대의 모든 학생의 최소 키를 반환합니다.</P><P> </P><P>:height == Col Minimum( :height, :age ) --> 이 행의 높이 열이 최소 높이와 일치하는 경우 true/false(1/0)을 반환합니다.</P><P> </P><P>Col Maximum( <이 행의 경우 1 또는 0> , :sex, :age ) --> 어... 말이 안 됩니다. 저는 열 최대값이 그룹화 기준 열(:sex, :age)로 데이터를 그룹화한 다음 첫 번째 인수에 있는 값이나 열의 열 최대값을 찾는 방식으로 작동하는 줄 알았는데요. 이제는 단일 참/거짓 또는 1/0일 뿐이고, 이 행의 그룹에 해당하는 최대값, 즉 :sex 및 :age에 대한 이 행의 값을 반환합니다.</P><P> </P><P>분명 그건 틀린 생각입니다. 제가 여기서 놓친 게 뭔가요?</P><P> </P><P> </P><P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-821779" slang="en-US" mode="CREATE">Re: 데이터 그룹에서 최소값과 최대값을 식별하는 방법</LINGO-SUB><LINGO-BODY id="lingo-body-821779" slang="en-US" mode="CREATE"><P>예를 들어 col 통계 함수의 다양한 조합을 사용하여 이를 수행하는 여러 가지 방법이 있습니다(이미 표시된 것과 같음). 여기 다른 옵션(당신이 찾고 있는 것을 수행할 것이라고 생각합니다)</P>
<P> </P>
<PRE><CODE class=" language-jsl">Col Min(Col Max(:height, :age, :sex), :age) == Col Max(:height, :age, :sex)
먼저 Col Min()은 연령, 성별 집단을 넘어 연령대 전반에 걸쳐 Col Max()를 찾은 다음, 이를 연령, 성별 집단 최대값과 비교하고, 이것이 연령대 최소값과 같으면 값은 1입니다.
이것들을 더 쉽게 이해하기 위해, 나는 이것들을 모두 별도의 것으로 쓰고 이해하기 쉽게 만드는 것이 유익하다고 생각한다. 이 경우:
First column with Col Max(:height, :age, :sex) (max_height_for_agesex)
- Next column then utilizes that
Col Min(:max_height_for_agesex, :age) age_minmax_age
- And the final one is the comparison of these two
:max_height_for_agesex == :age_minmax_age
Re: 데이터 그룹에서 최소값과 최대값을 식별하는 방법@jthi 감사합니다. 하지만 아직도 헷갈리네요.
이것으로 시작하겠습니다:
Col Min(Col Max(:height, :age, :sex), :age) == Col Max(:height, :age, :sex)
JMP가 "Col Max(:height, :age, :sex)"를 평가할 때, 무엇을 반환합니까? 단일 값? 아니면 목록?
이를 수식으로 사용하여 새 열을 만들면 해당 열의 행에 표시되는 값 목록이 생성됩니다.
하지만 수식 내에서는 다음과 같이 단일 값을 반환하는 것으로 보입니다.
a = col max(:height, :name);
type(a);
... "숫자"를 반환합니다.
그리고 새로운 스크립트를 만들고 다음을 입력하면:
a = col max(:height, :name); <BR />show(a);
"잘못된 행 번호"라고 하지만, ", :name" 없이는 70을 반환하는 데 잘 작동합니다. JMP가 이러한 함수로 어떤 종류의 컨텍스트별 의미를 처리하는 것 같습니다. 어떻게 작동합니까? 어디에 설명되어 있습니까?
Re: 데이터 그룹에서 최소값과 최대값을 식별하는 방법셀에서 수식 열의 수식을 실행하면 현재 행의 값이 계산됩니다.
JSL에서 실행하면 현재 행에 대해 계산됩니다.
같은 소리입니다. 하지만 "현재 행"의 기본값은 "행 0"입니다. 즉, 유효한 숫자가 없습니다.
기본값인 "0"이 아닌 모든 행에 대한 계산을 확인할 수도 있습니다.
계산 앞에 row()=xy를 붙이면 행 xy 에 대한 계산이 수행됩니다.
그래서, 예를 들어
row()=5;
col max(:height, :age)
66을 반환합니다.
:age in row=5 는 12 이고 age =12 의 최대 키는 66 입니다.
Re: 데이터 그룹에서 최소값과 최대값을 식별하는 방법아마 이렇게 작동할 것 같습니다.
Col ... 는 먼저 모든 행을 실행하여 첫 번째 인수의 결과를 저장합니다.
행별로 계산합니다. (예: 첫 번째 인수가 random uniform() 인 경우)
또한, 추가 그룹화 인수에 대한 조회 테이블도 저장합니다.
그런 다음 데이터를 하위 집합으로 분할하고 집계된 값을 계산한 후 집계된 값을 해당 행에 다시 분배합니다.
Re: 데이터 그룹에서 최소값과 최대값을 식별하는 방법
JMP가 "Col Max(:height, :age, :sex)"를 평가할 때, 무엇을 반환합니까? 단일 값? 아니면 목록?
단일 값.
스크립트를 만들고 무슨 일이 일어나는지 테스트하려면 by 열을 사용하는 경우 Row()를 활용해야 합니다(by 열 없이 JMP가 모든 행을 사용하도록 알고 있기 때문에 작동합니다). Row()는 JMP에서 기본적으로 0이므로 예를 들어 Row() = 1로 변경해야 합니다. JMP 도움말이나 스크립팅 인덱스에서 이에 대한 문서를 본 것 같지만 어디에 있는지 모르겠습니다(Row(), For Each Row 또는 Col 통계 함수와 관련이 있을 수 있음).
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
max_height = Col Max(:height); // works fine as no by var used and uses all rows
Show(Row());
Col Max(:height, :age); // won't work as JMP doesn't know which age to use -> it needs row information
Row() = 1;
cur_age = :age;
cur_maxheight = Col Max(:height, :age);
Write("\!Max height for age ", cur_age, " is ", cur_maxheight);Re: 데이터 그룹에서 최소값과 최대값을 식별하는 방법JMP가 전체 열 공식을 루프로 묶어 테이블의 행에 대해 "Row()"를 반복하고 각 행의 값을 계산한다고 말씀하시는 것 같습니다.
이 표현을 제외하면 그것은 말이 됩니다.
Col Min(Col Max(:height, :age, :sex), :age)
... 그 논리에 따르면, 예를 들어 Row()가 i=1로 설정되면 전체 테이블의 :height 열에서 가장 큰 값으로 Col Max()를 계산합니다. 여기서 :age[i] == :age[1]이고 :sex[i] == :sex[1]인 경우입니다. 그러면 단일 숫자가 반환됩니다. 그런 다음 정의에 따라 해당 단일 숫자의 Col Min()을 계산하려고 합니다. 저는 이것이 말이 되는지 정말 고민하고 있습니다.
저는 Col Max()가 목록을 반환하고, Col Min()은 :age[i] == :age[1]인 목록의 모든 행을 살펴볼 것이라고 계속 생각합니다.
하지만 여기서 제 생각은 JMP가 perl이 하는 것과 비슷한 것을 해야 한다는 것입니다. 기본적으로 무언가가 스칼라 또는 리스트 컨텍스트에서 호출되는지 추적하는 것입니다. 즉, 함수가 리스트를 기대하는 방식으로 사용되면 리스트를 반환하고 그렇지 않으면 스칼라를 반환합니다. 이런 식으로 Col Max()는 Col Min()에 대한 리스트를 반환할 수 있고, 그러면 스칼라 값이 반환됩니다.
제가 뭔가를 놓친 것 같은데, 그것이 무엇인지 잘 모르겠습니다.
Re: 데이터 그룹에서 최소값과 최대값을 식별하는 방법아니요, JMP가 테이블의 행을 한 번만 탐색하여 전체 표현식을 계산한다는 아이디어는 아닙니다.
Re: 데이터 그룹에서 최소값과 최대값을 식별하는 방법JMP가 무엇을 하는지 조사해 보기 위해, 먼저 아주 작은 데이터 테이블을 만들어 보겠습니다.
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt = dt0 << Clear Select << Select Rows( [2, 10, 11, 25] ) << Subset( Selected Rows( 1 ), Selected columns only( 0 ) );
nr = n rows(current data table());
... 그리고 로그 기능이 포함된 수식 열:
New Column( "test", Formula(Col Min(Write( "\!nmin:" || (Char( Row() )) );if(row()==nr, write("\!n") );:height, :age)));출력:

따라서 이 경우 JMP는 코드를 여러 번 실행합니다.
나중에 궁금해지죠...
Re: 데이터 그룹에서 최소값과 최대값을 식별하는 방법이제 확인해 보겠습니다
New Column( "test",
Formula(
Col Min(
Write( "\!nmin:" || (Char( Row() ) || "\!n\!n") );
Col Max(
Write( "max:" || (Char( Row() ) || "\!n") );
:height;,
:age,
:sex
);,
:age
)
)
)
...그리고 우리는 *)을 얻습니다

이는 다음을 보여줍니다:
- 간단한 예제의 경우 JMP는 모든 행에 대해 Col Min 의 첫 번째 인수를 평가합니다.
- 두 번째 버전의 경우 JMP는 모든 행에 대해 Col Min 의 첫 번째 인수를 평가합니다. 이 코드 내에 또 다른 Col... 집계가 있으므로 ColMax 루프가 뒤따릅니다. 모든 행에 대한 Col Max 의 첫 번째 인수
마지막으로 JMP는 각 행에 대한 ColMax(...) 의 값을 알고 있으며 이러한 값으로 Col min을 평가할 수 있습니다.
이건 당신이 말한 것과 거의 같습니다. 목록 컨텍스트와 함께요. 하지만 JMP는 결과를 데이터 테이블 컨텍스트에 저장한다고 생각합니다. 그래서 VALUES를 row(), row states()와 같은 추가 정보와 결합할 수 있습니다.
하지만 JMP의 누군가나 @jthi가 더 잘 설명해 줄 수도 있을 것 같습니다.
*) 다시: 여러 번:
자세한 내용은 여기에서 확인하세요:
https://community.jmp.com/t5/Discussions/Statistical-functions-Col-Mean-for-example-possously-bugged-on/mp/613887/highlight/true#M81398
Re: 데이터 그룹에서 최소값과 최대값을 식별하는 방법코드 실행을 테스트하는 또 다른 방법:
i = 0;
j = 0;
New Column( "test",
Formula(
Col Min(
i++;
Col Max(
j++;
:height;,
:age,
:sex
);,
:age
)
)
);
// too early
Show( i );
Show( j );
Current Data Table() << run formulas();
// after calculating the values
Show( i );
Show( j );

나 = 5 x 4
제이 = 5 x 5 x 4
Re: 데이터 그룹에서 최소값과 최대값을 식별하는 방법-
Re: 데이터 그룹에서 최소값과 최대값을 식별하는 방법Col 통계 함수는 다른 일부 함수에는 없는 고유한 마법 같은 기능을 가지고 있습니다. 예를 들어, 내부 캐싱 기능과 byvars 지원 기능이 있습니다. https://www.jmp.com/support/help/en/18.0/#page/jmp/statistical-functions.shtml#
Re: 데이터 그룹에서 최소값과 최대값을 식별하는 방법네, 데이터를 준비하는 이 똑똑한 방법은 매우 유용합니다.
마법이 작동하는 방법의 예:
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << Clear Select << Select Rows( Index( 5, 40 ) ) <<DELETE rows=""></DELETE>newCol << Set Formula(Col Min(Print(row());:height,:age)); // 2 x 4<BR /><BR />newCol << Set each value(Col Min(Col Max(Print(row());:height,:sex),:age)); // 4 + 4
newCol << Set Formula(Col Min(Col Max(Print(row());:height,:sex),:age)); // 2 x 4 + 4
다음 탭 중 하나에 접속하지 않도록 주의하세요.
i=1;<BR />newCol << set each value (Col Min(Print("X");:height,:age)); // 16 = 4 x 4
newCol << set Formula (Col Min(Print("X");:height,:age)); // 20 = 5 x 4<BR />newCol << set Formula (Col Min("x";Print(3);:height,:age)); // 20 = 5 x 4
newCol << Set Formula(Col Min(i;Print(row());:height,:age)); // 20 = 5 x 4<BR />
newCol << set each value (Col Min(Col Max(Print("X");:height,:sex),:age)); // 80 = 5 x 4 x 4
newCol << set Formula (Col Min(Col Max(Print("X");:height,:sex),:age)); // 100 = 5 x 5 x 4<BR />newCol << set Formula (Col Min(Col Max("X";Print(3);:height,:sex),:age)); // 100 = 5 x 5 x 4
newCol << Set Formula(Col Min(Col Max(i;Print(row());:height,:sex),:age)); // 100 = 5 x 5 x 4
Col 집계는 다음을 볼 때 조심스러워집니다.
그런 다음 속도를 낮추어 계층적 트리에서 각 행의 모든 값(+1)을 계산합니다.
Re: 데이터 그룹에서 최소값과 최대값을 식별하는 방법여기서 당신이 하는 모든 일을 따라갈 만큼 똑똑하지 못한 것 같아요 --
내 의견에 동의하는 것 같군요? 즉, Col ... 함수는 스칼라와 리스트 컨텍스트에서 다른 일을 한다는 거죠?
Re: 데이터 그룹에서 최소값과 최대값을 식별하는 방법1년을 기다려서 다시 논의해 봅시다. 상황이 바뀔 수도 있으니까요.