2017-12-06 2 views
1

두 개의 SAS 데이터 세트 (각각 간단하게 가정)가 있습니다. 첫 번째 데이터 세트에는 회사 설명이 포함 된 변수가 포함됩니다 (때로는 도시 포함, 때때로 지저분한 필드). 두 번째 데이터 세트에는 변수가 있으며 모든 도시가 나열됩니다. 첫 번째 데이터 집합에 변수를 만들 필요가 있습니다. 두 번째 데이터 집합의 도시를 찾았는지 여부와 결과에 0 또는 1 개의 대답 만 포함하면 안되지만 도시 자체가 포함되어야합니다. INDEXW (또는 비슷한) 함수를 반복하지 않고도 쉽게 수행 할 수 있습니까?SAS는 문자열에서 여러 값을 검색합니다.

답변

3

indexw의 무엇이 잘못 되었나요? proc sqlindexw을 사용하면 매우 간단한 해결책을 얻을 수 있습니다.

샘플 데이터 :

data have_messy; 
    length messy $100; 
    messy = 'this is a city name: brisbane' ; output; 
    messy = 'this is a city name: sydney' ; output; 
    messy = 'this is a city name: melbourne'; output; 
run; 

data have_city; 
    length city $20; 
    city = 'sydney' ; output; 
    city = 'brisbane'; output; 
run; 

예 질의 :

proc sql noprint; 
    create table want as 
    select a.*, 
     b.city 
    from have_messy a 
    left join have_city b on indexw(a.messy, b.city) 
    ; 
quit; 

결과 :

messy        city 
===============================  ========= 
this is a city name: sydney   sydney 
this is a city name: brisbane  brisbane 
this is a city name: melbourne 

조심 - 여러 경우 위의 쿼리는 테이블 A의 행 당 여러 개의 결과를 반환 할 수 있습니다 도시 이름이 있습니다. 요구 사항에 따라 중복 행을 처리하기위한 후속 조치를 실행하는 것이 좋습니다.

+0

아무 문제가 없습니다. 그냥 그 기능을 조인 할 수 있음을 깨닫지 못했습니다 ... 오늘 많이 배웠습니다. 감사! – VR6

관련 문제