"패턴"이 있는 열 선택안녕하세요
이것은 간단한 작업이지만 즉각적인 방법을 찾지 못했습니다.
많은 열(~5000개)이 있는 테이블이 있습니다. 열의 하위 집합을 선택한 다음 하위 집합 테이블을 추출해야 합니다.
가장 멍청한 방법은 열 선택기에서 각 열을 선택하는 것입니다.
실제로 열 이름에 "패턴"을 적용하면 필요한 열을 쉽게 식별할 수 있었습니다.
예를 들어 열은 다음과 같습니다.
AAA11
AAA12
ABB22
XXX99
CAB32
CAB99
이름에 "B"가 포함되고 "2"로 끝나는 열을 선택해야 합니다.
"*B*2" 와 같은 패턴으로 식별할 수 있습니다. 여기서 "*"는 와일드카드입니다.
이 예에서는 패턴이 "ABB22" 및 "CAB32"를 선택합니다.
나는 이것을 수행하는 쉬운 방법을 찾지 못했습니다.
미리 감사드립니다
에마누엘레
데이터 혼합 및 정리Re: "패턴"이 있는 열을 선택하세요.정규 표현식이 꼭 필요하고 FilterEach가 포함된 최신 버전의 JMP가 있는 경우:
dt = Open( "$sample_data/big class.jmp" );
colList = dt << get column names( string );
// (>?.*?) is an atomic match for a reluctant (not greedy) match of 0 or more characters
// atomic is important when the match might fail to keep if from slowing down a lot on long names
Filter Each( {name}, colList, !Is Missing( Regex( name, "^((.e.)|((>?.*?)a(>?.*?)e.*))$" ) ) );
{"이름", "나이", "성별"}
언제나 그렇듯이 Regex는 읽는 것보다 쓰는 것이 더 재미있습니다. 일치하지 않을 수 있는 단일 정규식에서 여러 개의 .*를 사용하는 경우 주의하세요. 결과 없는 대안을 많이 시도할 수 있습니다.
Re: "패턴"이 있는 열을 선택하세요.다음은 기준을 충족하는 열 목록을 작성하는 간단한 스크립트입니다.
Names Default To Here( 1 );
dt = Current Data Table();
colList = dt << get column names( string );
For( i = N Items( colList ), i >= 1, i--,
If( !(Contains( colList[i], "B" ) & Right( colList[i], 1 ) == "2"),
Remove From( colList, i, 1 )
)
);