JSL 데이터 필터에 "And" 조건 추가안녕하세요 JMP 커뮤니티
JSL에서 데이터 필터에 "and" 조건을 추가하는 방법이 있는지 궁금합니다.
예를 들어 내가 데이터 세트를 만들었습니다

만약 우리가 평균에 대한 간단한 모델을 만든다면,
model = Fit Model( Y( :Data ), Run);
데이터 필터를 사용하여 모델을 하나의 그룹으로 제한할 수 있습니다.
dtf = model << Local Data Filter(Columns(:Group), where(:Group == "A"));

그러나 지금 다른 필터를 추가하고 싶을 때 내가 찾을 수 있는 유일한 JSL 옵션("필터 추가", "열 필터링" 등)은 "또는" 조건으로만 추가하는 것 같습니다.
dtf << Add Filter(columns(:Outlier), where(:outlier == 0));
dtf << Filter Columns(:Outlier);

유일한 옵션은 데이터 필터를 제거한 다음 모든 조건이 포함된 새 필터를 추가하는 것 같습니다.
model << Remove Local Data Filter;
dtf = model << Local Data Filter(Columns(:Group, :Outlier), where(:Group == "A"), where(Outlier == 0));

"그리고" 조건을 추가하는 방법이 없는 건가요 아니면 아예 불가능한 건가요?
영어: br.브.
카스퍼 슐로서
자동화 및 스크립팅Re: JSL 데이터 필터에 "And" 조건 추가JMP에서 필터를 생성하고 스크립트를 복사합니다.
Fit Model(
Y(:Data),
Effects,
Personality("Standard Least Squares"),
Emphasis("Effect Leverage"),
Run(
:Data << {Summary of Fit(1), Analysis of Variance(1), Parameter Estimates(1),
Lack of Fit(0), Plot Actual by Predicted(1), Plot Regression(0),
Plot Residual by Predicted(1), Plot Studentized Residuals(0),
Plot Effect Leverage(1), Plot Residual by Normal Quantiles(0),
Box Cox Y Transformation(0)}
),
Local Data Filter(
Add Filter(
columns(:Group, :Outlier),
Where(:Group == "A"),
Where(:Outlier == 1)
)
)
);
이것은 일반적으로 당신이 스크립팅할 수 있는 것에 대한 좋은 아이디어를 제공합니다
dt = Current Data Table();
model = Fit Model(Y(:Data), Run);
dtf = model << Local Data Filter(
Columns(:Group, :Outlier),
Where(:Group == "A"),
Where(:Outlier == 1)
);
Re: JSL 데이터 필터에 "And" 조건 추가네. 스크립팅 인덱스는 데이터 필터가 허용하는 메시지(항상 모든 메시지는 아님)에 대한 개요도 제공합니다.
두 가지 모두 jsl을 통해 데이터 필터에 "and" 조건을 추가할 방법이 없다는 것을 나타냅니다.
즉, "and" 조건을 추가하는 유일한 방법은 jsl에서 필터 코드를 추출하고, 코드를 변경한 다음, 구문 분석하고 평가하는 것입니다. 이는 지저분하고 오류가 발생하기 쉽습니다.
Re: JSL 데이터 필터에 "And" 조건 추가노출된 제한 사항을 JMP 위시리스트에 추가하세요.
또한, 당신이 언급한 parse and evaluate에 대해 저는 다른 견해를 가지고 있는 것 같습니다. 제가 한계에 부딪혔을 때 JMP가 이 기본 수준의 기능을 제공하여 대부분 해결책으로 가는 길을 열어준다는 점이 위안이 됩니다.
Re: JSL 데이터 필터에 "And" 조건 추가필터에 새 열을 추가하면 기본적으로 새 필터링 그룹을 만드는 것이고 기본적으로 이들은 OR로 구분됩니다. 사용 사례에 따라 때때로 Grouped by And를 사용할 수 있습니다.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Cities.jmp");
obj = dt << Data Filter(
Add Filter(columns(:Region, :POP), Where(:Region == {"C", "N"})),
Mode(Select(0), Show(0), Include(1))
);
obj << Add Filter Columns(:State);
obj << Grouped by AND(1);
UI에는 AND를 누르면 선택한 그룹에 추가 기능이 있지만, 해당 기능을 위한 간단한 스크립팅 옵션은 없습니다.
Re: JSL 데이터 필터에 "And" 조건 추가
@jthi 님이 쓰셨습니다:
하지만 저희는 해당 작업에 대한 간단한 스크립팅 옵션을 제공하지 않습니다.
우리는 다음과 같은 것을 가지고 있다고 생각합니다:
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class Families.jmp" );
gb = dt << Graph builder();
dtf = gb << Local Data Filter(
Columns(:sex),
Where(:sex == "F")
);
dtf << (Filter Column(:age) << Where(:age == 14));
Re: JSL 데이터 필터에 "And" 조건 추가이게 효과가 있는 것 같아요
간단한 테스트 결과, 이 방법은 첫 번째 필터에 영향을 미치는 것으로 나타났습니다. 즉, "또는" 조건이 2개 있는 경우 첫 번째 필터에만 영향을 미칠 수 있습니다.
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class Families.jmp" );
gb = dt << Graph builder();
dtf = gb << Local Data Filter(
Columns(:sex),
Where(:sex == "F")
);
// adds or condition
dtf << Add Filter(Columns(:sex), Where(:sex == "M"))
// Only affects the female filter
dtf << (Filter Column(:age) << Where(:age == 14));
하지만 제 사용 사례에서는 이게 완벽해요.
Re: JSL 데이터 필터에 "And" 조건 추가좋은 발견이에요!
이것은 필터 열과 함께 where 메시지를 보내는 경우에만 작동하는 듯합니다. 이것은 의도치 않은 것일 수도 있고 버그일 수도 있지만 우리는 그것을 가지고 있어서 운이 좋습니다(JMP가 업데이트될 때마다 언제든지 깨질 수 있습니다).
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Cities.jmp");
obj = dt << Data Filter(
Add Filter(
columns(:Region, :POP),
Where(:Region == {"C", "N"})
),
Mode(Select(0), Show(0), Include(1))
);
obj << Filter Column(:State); // creates OR group
obj << (Filter Column(:State) << Where()); // Adds AND filter to first filter group
obj << (Filter Column(:CO) << Where()); // Adds AND filter to first filter group
아마도 기존 그룹 내에서 AND 필터링만 할 수 있고 새로운 필터 OR 그룹만 사용하는 건 훨씬 나을 겁니다.
@Craige_Hales 이런 일이 왜 일어나는지 아시나요? / JMP 측에서 누구를 태그해야 할지 아시나요?
Re: JSL 데이터 필터에 "And" 조건 추가@jthi가 이전에 지적했듯이, 필터는 "그룹"과 "항목"으로 구성되며, 필터 그룹은 스크립트 가능한 객체로 JSL에 직접 노출되지 않습니다. df << (Filter Column(:col) << Msg()) 구문은 메시지를 그룹으로 "전달"하는 원래 방법이었지만, 잘 문서화되어 있지 않습니다. 이 구문은 스크립팅 인덱스에 문서화 된 간단한 메시지 df << Filter Column(:col)과는 매우 다른 경로라는 점을 지적하겠습니다. 이전 구문에는 처리를 위한 기본 제공 JSL 규칙이 없지만, Bivariate와 같은 다른 객체에서 비슷한 방식으로 사용됩니다. 기본적으로 필터로 전송되는 메시지는 표현식이며, 지원되는 구문은 필터에 맞게 사용자 지정됩니다.
메시지를 전달하기 위한 특수 구문에 대해 조금 더 설명하겠습니다. 메시지를 수신해야 하는 필터 그룹의 인덱스를 지정하는 선택적 두 번째 인수가 있습니다. 이는 여러 그룹이 있고 동일한 열을 포함할 수도 있는 경우 중요할 수 있습니다. 이것이 없으면 명령은 첫 번째 일치하는 열로 전송되거나 첫 번째 그룹에 추가됩니다.
필터 항목으로 전송되는 Msg()가 간단한 메시지일 수 있다는 것을 알 수도 있습니다. 여기서의 처리에서는 처리할 명령 목록을 전송하는 것을 지원하지 않습니다. 이는 다시 내부 <<가 사용자 지정 실행이고 핵심 JSL 규칙을 직접 사용하지 않기 때문입니다.
dt = Open( "$SAMPLE_DATA/Cities.jmp" );
df = dt << Data Filter(
Location( {1001, 218} ),
Add Filter( columns( :POP ), Where( :POP >= 4461 ) ),
Add Filter( columns( :OZONE ), Where( :OZONE <= 0.12581 ) )
);
// add a filter item to the first group
df << (Filter Column(:Region, 1) << Check Box Display);
// add a filter item to the second group
df << (Filter Column(:NO, 2) << Where(:NO <= 0.05));