전체 열과 현재 행 구별안녕하세요,
간단한 "포함" 공식을 구현하는 데 어려움을 겪고 있습니다. 샘플 데이터 세트와 공식은 다음과 같습니다.

텍스트는 다음과 같습니다. Contains(:Column 1, :Column 2)
문제: 항상 열 1(전체)의 현재 행을 확인하는 것 같습니다. 현재 행뿐만 아니라 전체 열을 확인하고 싶습니다. E와 B가 Column 2에 있는 것을 볼 수 있지만, 출력에서는 전체에서 해당 부분을 찾지 못했다고 나옵니다.
열의 현재 행뿐만 아니라 전체 열을 확인하라고 명시적으로 어떻게 말합니까?
매우 감사합니다!
기본 데이터 분석 및 모델링Re: 전체 열과 현재 행을 구별합니다.문제를 해결하는 한 가지 방법이 있습니다.
As Constant( colList = :Column 1 << get values );
Contains( colList, :Column 2 );
Re: 전체 열과 현재 행을 구분합니다.안녕 @케빈브러너 ,
JMP에서 행이 아닌 열을 비교하는 가장 확실한 방법은 테이블 조인을 사용하는 것이라고 생각합니다.
아마도 이런 것
// New data table
// → Data Table( "Untitled" )
dt1 = New Table( "Untitled" );
dt1 << New Column("Column 1", Character, "Nominal", Set Values({"A", "B", "C", "D", "E"}));
// New data table
// → Data Table( "Untitled 2" )
dt2 = New Table( "Untitled 2" );
dt2 << New Column("Column 2", Character, "Nominal", Set Values({"A", "E", "F", "B", "H"}));
// Join data tables
// → Data Table( "Untitled 3" )
dt1 << Join(
With( dt2 ),
Match Flag( 1 ),
By Matching Columns( :Column 1 = :Column 2 ),
Drop multiples( 0, 0 ),
Include Nonmatches( 1, 1 ),
Preserve main table order( 1 )
);
스크립팅 대신 클릭을 사용하여 수행할 수도 있습니다. 아래 그림과 같이

Re: 전체 열과 현재 행을 구분합니다.어쩌면 목표를 좀 더 명확히 할 수도 있을 것 같아요.
열 3에서 열 2의 현재 행이 발견되면 1을 반환하는 함수를 원합니다. 어딘가에 열 1에. 따라서 제 예에서는 3열에 1, 1, 0, 1, 0이 표시되어야 합니다. 해당 행의 E와 B가 열 1에 있기 때문입니다.
매우 감사합니다!
Re: 전체 열과 현재 행을 구분합니다.나는 이것을 시도했다. 훨씬 더 가깝지만 내가 원하는 것은 아닙니다. 그것은 내가 찾고 있는 것보다 더 많은 것을 계산하고 있습니다. B는 5이고 E는 2라는 뜻이다. 나는 단지 참 또는 거짓, 1 또는 0이 필요합니다.

Re: 전체 열과 현재 행을 구별합니다.As Constant( colList = :Column 1 << get values );
Contains( colList, :Column 2 ) > 0;
Re: 전체 열과 현재 행을 구분합니다.
... 다음 @txnelson 님의 두 번째 제안:
https://community.jmp.com/t5/Discussions/Differentiate-between-entire-column-and-current-row/mp/675677/highlight/true#M86260
또는:
Local( {t0 = :Column 1 << get values}, Contains( t0, :Column 2 ) > 0 )지역 변수를 생성합니다.

이는 한 번 계산되어 모든 행에 사용됩니다.
더 나쁜:
t0 = :Column 1 << get values;
Contains( t0, :Column 2 ) > 0;
이 버전은 얻다 그만큼 가치 모든 단일 행에 대해 계속해서 다시.
Re: 전체 열과 현재 행을 구분합니다.도움을 주셔서 다시 한번 감사드립니다.
코드를 단순화할 수 있었습니다.
Contains(:열 1 << 값 가져오기, :열 2) > 0;
내가 원하는 것을 정확하게 수행합니다. 아마도 이것이 미래에 도움이 될 것입니다.
건배.
Re: 전체 열과 현재 행을 구별합니다.당신은 또한 사용할 수 있습니다 상수로() 첫 번째 행에서만 평가하려면
Names Default To Here(1);
row_count = 10000; // 100 000 starts getting slow
dt = New Table("test",
Add Rows(row_count),
New Column("Die X", Numeric, Nominal),
New Column("Die Y", Numeric, Nominal),<BR />invisible
);
dt << Begin Data Update;
For Each Row(dt,
:Die X = Random Integer(1, N Rows(dt));
:Die Y = Random Integer(1, N Rows(dt) * 2);
);
dt << End Data Update;
wait(0);
start = HP Time();
dt << New Column("Formula", Numeric, Nominal, Formula(
Contains(:Die X << Get Values, :Die Y) > 0;
));
dt << Run Formulas;
Show(HP Time() - start);
start = HP Time();
dt << New Column("Formula As Constant", Numeric, Nominal, Formula(
As Constant(x_m = :Die X << get values);
Contains(x_m, :Die Y) > 0;
));
dt << Run Formulas;
Show(HP Time() - start);
Re: 전체 열과 현재 행을 구분합니다.테이블 업데이트는 어떻습니까?
Jmp가 col 1의 항목을 업데이트하면 3가지 변형이 모두 업데이트되므로 모든 것이 괜찮은 것 같습니다.
Names Default To Here(1);
row_count = 10; // 100 000 starts getting slow
dt = New Table("test",
Add Rows(row_count),
New Column("col1", set each value(Random Integer(1, row_count))),
New Column("col2", set each value(Random Integer(1,row_count*2))));
wait(0);
New Column( "Formula", Formula( Contains( :col1 << Get Values, :col2 ) > 0 ));
New Column( "Formula with local variable", Formula( Local( {t0 = :col1 << get values()}, Contains( t0, :col2 ) > 0 ) ));
New Column( "Formula As Constant", Formula(As Constant( t_1 = :col1 << get values ); Contains( t_1, :col2 ) > 0));
:col1 << set each value(-10);
:col1[1] = :col2[1];
Re: 전체 열과 현재 행을 구분합니다.... 수동으로 시도하기 전까지는 말이죠.
나는 만약에 관심이 있었다 일정하게 업데이트를 알립니다. 여기에는 문제가 없습니다.
그러나 놀랍게도 "공식" 열에는 실제로 예상하지 못한 문제가 있습니다.
먼저 정확한 계산을 한 후, 첫 번째 계산된 열 중 일부가 제대로 작동하지 않고 열 항목을 1:1로 비교하기 시작합니다!?!
(내 코드가 정확하지 않나요?)
Jmp 매뉴얼에 따르면, contain의 첫 번째 인수는 다음과 같아야 합니다.

JSL 기호(예: t0)도 허용한다는 점이 얼마나 좋은지 
하지만 좀 더 복잡한 표현은 편치 않은 것 같습니다.
제목: 전체 열과 현재 행을 구분하는 방법JMP 19.0.4에서도 동일한 문제가 발생합니다.