문자열 자르기<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />'Found in Version'이라는 열이 포함된 데이터 테이블이 여러 개 있습니다.주 버전은 일반적으로 4자리입니다. --- 부 버전은 때때로 주 버전 번호 끝에 알파벳 문자를 추가합니다.그래프 작성을 위해 부 버전을 표시하고 싶지 않습니다 --- 대신 부 버전을 관련 주 버전과 병합하고 싶습니다.예를 들어...메이저 버전이 5.1.2.1이면 마이너 버전 5.1.2.1a도 5.1.2.1이라고 부르기를 원합니다.....
믹스에 또 다른 주름을 던지기 위해 ---- 모든 5.1.2.x를 5.1.2로 변환하고 싶을 수도 있습니다. 등... 버전 5.1.2가 됩니다.
현재 열은 '특성', '명칭'......필요한/원하는 세부 수준에 따라 열의 문자열을 7자 또는 5자로 '잘라낼' 생각을 하고 있었는데 --- 그렇게 하는 방법이나 더 나은 접근 방식이 있는지 잘 모르겠습니다.
또한 --- 서로 다른 팀으로부터 데이터 테이블을 받고 있습니다 --- 각 팀마다 버전 체계가 다른 것 같습니다 --- 따라서 유연성이 내장되어야 합니다 ----- 각 데이터를 분석해야 하는지 확실하지 않습니다 요소 s, 공통 문자를 비교하여 동일한 버전에 '속해' 있는지 확인합니다 ???

Re: 문자열 잘림여기에 있는 답변은 매우 도움이 되었고 내가 이것을 너무 복잡하게 만들었는지도 모른다는 생각이 들게 했습니다 --- 그래서 지난주에 '왼쪽' 문자 기능을 시도했지만 작동하지 못했습니다....내 구문이 '꺼짐'이었을 것입니다. --- 오늘 저에게 효과가 있었기 때문입니다..
| 각 행(: Vers Truncated에서 발견됨 = Left(:버전에서 찾았습니다, 7)); |
---- 이것은 단순히 문자열을 가장 왼쪽 문자로 자릅니다... 더 낮은 버전 문자를 제거합니다. 일부는 추가된 알파 문자가 없는 3자리 숫자를 사용합니다.) 이 방법이 작동할 수 있다고 생각하지만 잘림 수준을 결정하는 데 사용되는 버전 체계를 테스트해야 합니다....
Re: 문자열 잘림정규식(regex())이 문제를 해결할 수 있다고 생각합니다.
Newcolumn("주요 버전에서 발견",문자,명목상,
formula(regex(:버전에서 발견, ".*?(\d+\.\d+\.\d+).*","\1")
);
".*?(\d+\.\d+\.\d+).*"는 .*? 뒤에 임의 길이의 숫자, \d+, 십진수 한 번, \., 숫자가 오는 것을 의미합니다. 모든 길이, \d+, 소수점 한 번, \. , 임의 길이의 숫자, \d+, 그 뒤에 아무 것이나 올 수 있습니다. 괄호 안의 부분, 숫자 및 소수점 \1만 반환합니다.
부 버전의 경우 정규식(regex())을 변경하여 소수점과 숫자를 하나 더 포함합니다.
Newcolumn("마이너 버전에서 발견", 문자, 명목,
formula(regex(:버전에서 발견, ".*?(\d+\.\d+\.\d+\.\d+).*","\1")
);
Re: 문자열 잘림반면에 ETL의 핵무기는 모든 것을 처리하지만 더 많은 작업을 보장합니다. 서로 다른 공급업체가 상당히 다른 프로세스를 따르는 경우 이것이 유일한 옵션임을 알 수 있습니다.
각 공급업체에 대해 고유한 적합성 표를 생성하기만 하면 됩니다.
데이터가 있습니다.
길이 FoundInVersion $32;
입력 FoundInVersion $;
카드;
5.1.2.1
5.1.2.2
5.2.2.2a
5.2.2.3
5.2.2.3x
5.2.2.9
5.2.2.9이상하다
달리다;
데이터 master_conversion;
길이 FoundInVersionGood FoundInVersion $32;
입력 FoundInVersionGood $ FoundInVersion $;
카드;
5.1.2 5.1.2.1
5.1.2 5.1.2.2
5.2.2 5.2.2.2a
5.2.2 5.2.2.3
5.2.2 5.2.2.3x
5.2.2 5.2.2.9
5.2.2 5.2.2.9이상하다
달리다;
프로시저 SQL;
원하는 테이블 생성
FoundInVersionGood을 FoundInVersion으로 선택
master_conversion 내부 조인에서
보유(master_conversion.FoundInVersion = 보유.FoundInVersion);
그만두다;
톰
Re: 문자열 잘림SAS 코드 사용에 대해 사과드립니다. 저는 JMP 사용자가 아닙니다. 아마도 JMP에 동등한 기능이 있을까요?
이것은 매우 간단하고 멍청하므로 데이터가 매우 적합해야 합니다.
데이터가 있습니다.
길이 FoundInVersion $32;
입력 FoundInVersion $;
카드;
5.1.2.1
5.1.2.2
5.2.2.2a
5.2.2.3
5.2.2.3x
5.2.2.9
5.2.2.9이상하다
달리다;
데이터 필요;
길이 FoundInVersionGood $32;
세트 가지고;
/* 마침표를 구분 기호로 사용하여 첫 번째, 두 번째 및 세 번째 단어를 스캔한 다음(SCAN) 사이에 마침표를 사용하여 연결합니다(CATX). */
/* 항상 최소한 3개의 레벨이 있다고 가정 */
FoundInVersionGood = catx(".", scan(FoundInVersion,1,"."), scan(FoundInVersion,2,"."), scan(FoundInVersion,3,"."));
달리다;
톰
Re: 문자열 잘림이것은 트릭을 할 것입니다.모든 값을 반복하고 정규식을 사용하여 각 값을 테스트합니다.
dt = 현재 데이터 테이블 () ;
dt << 새 열 ( "Vers Truncated에서 발견" , 성격 , 명사 같은 ) ;
~을 위한 ( 나 = 1 , 나 <= nrows ( dt ) , 나 ++,
테스트_값 = 열 ( dt , "버전에서 찾았습니다" )[ 나 ] ;
// 마지막 문자가 a~z인지 확인
만약에 ( 누락 ( 정규식 ( 테스트_값 , "[az]$" )) ,
// 그 다음에
열 ( dt , "Vers Truncated에서 발견" )[ 나 ] = 테스트_값 ;
,
// 또 다른
one_length = 길이 ( 테스트_값 ) ;
열 ( dt , "Vers Truncated에서 발견" )[ 나 ] = substr ( 테스트_값 , 1 , ( one_length - 1 )) ;
) ;
) ;
Re: 문자열 잘림안녕,
이것이 원하는 것인지 확실하지 않음:
데이터가 있습니다.
이전 입력 :$10.;
카드;
5.1.2
5.1.2.1
5.1.2.1e
;
데이터 필요;
새로운 길이 $5;
세트 가지고;
새로운 = 오래된;
달리다;
프로시저 인쇄;실행;
하이쿠오