안녕하세요,
나는 같은 테이블이
| 신분증 | Column2 |
| ABC001235G | |
| ABC001234 | |
| ABC001235 | |
| ABC001234D | |
| ABC001234F | |
'ABC001234D'및 'ABC001234F'와 같은 모든 값이 'ABC001234'가되도록 ID 열을 다시 코딩하고 싶습니다. 기본적으로 마지막 문자를 명령문에 삭제하고 싶습니다. 그러나 수동 프로세스로는이를 수행 할 수 없습니다. 수행 할 행이 너무 많아서 스크립트에서 사용할 수있는 각 ID에 대해 수동으로 작성할 수 없었습니다. 스크립팅을 통해이를 수행하는 방법을 찾고 있습니다. 감사!
안녕하세요, saneal!
여기에 도움이 될 수있는 공식이 있지만 ID 변수의 명명 규칙과 정확성에 대해 몇 가지 가정을해야합니다.
ID 값의 처음에 3 개의 문자가 일관되게있는 경우 새 열을 만들고 다음 공식을 사용할 수 있습니다.
Substr (: ID, 1, 3) || 정규식 (: ID, "\ d +")
이 수식을 사용하면 숫자 값의 길이가 일치하지 않을 수 있습니다.ID 값의 시작 부분에 일관되지 않은 문자 수가 포함되도록 수식을 조정하는 것도 그리 어렵지 않습니다.그러나 누군가가 ID를 O (문자) 대신 0 (숫자)으로 잘못 입력하거나 기타 특정 오타를 입력하면 예기치 않은 결과가 발생할 수 있습니다.
행운을 빕니다,
케빈
다음 공식으로이를 수행 할 수 있습니다.
val = Reverse( :ID );
While( Is Missing( Num( Substr( val, 1, 1 ) ) ),
val = Substr( val, 2 )
);
Reverse( val );
모든 후행 숫자가 아닌 값이 제거됩니다.
이를 위해 정규식을 사용합니다. 나는 적어도 일정 수준에서 정규식을 사용하기 위해 원 포인트에서 이것을 좋아했습니다. 정규식 또한 확인 JMP 문자 함수-정규식 스크립팅 인덱스의 Regex.
다음은 JMP에서 Regex를 사용하여 끝 문자를 제거하는 두 가지 가능한 방법의 예입니다 (대문자가 아닌 문자도 지원하도록 쉽게 수정할 수 있음).
Names Default To Here(1);
dt = New Table("Untitled 3",
Add Rows(5),
Compress File When Saved(1),
New Column("ID",
Character,
"Nominal",
Set Values(
{"ABC001235G", "ABC001234", "ABC001235", "ABC001234D", "ABC001234F"}
)
)
);
dt << New Column("Regex1", Character, Nominal, Formula(Regex(:ID, "^[A-Z]+(\d+)")));
dt << New Column("Regex2", Character, Nominal, Formula(Regex(:ID, "[A-Z]*$", "", GLOBALREPLACE);));
사용 사례에 따라 하나를 선택합니다 (다른 문자열에서 작동하는 방식을 예제 코드로 쉽게 테스트 할 수 있음).
첫 번째 문자는 문자열의 시작 부분에서 1 개 이상의 대문자와 그 뒤에 오는 임의의 숫자와 일치합니다 (따라서 숫자 뒤의 모든 문자는 무시됩니다).
두 번째 문자는 문자열 끝에서 0 개 이상의 대문자와 일치하고 빈 문자열로 바꿉니다.