2012-06-18 4 views
0

사람이 어떻게 이런 종류의 데이터를 추출하는 방법을 가르쳐 주시겠습니까 :추출물 XML 배열 MySQL의 가치 또는 SAS가

[{ "수": "8457215152", "유형": "셀", "상태" "LA", "국가": "미국", "tz": "CT", "zip": "70546", "msa": "0"}, { "숫자": "4363685555" "셀", "상태": "LA", "국가": "미국", "tz": "CT", "zip": "70546", "msa": "0"}]

I ...

이 ID

MSA 1 (845)을 압축 텍사스

ID 번호 유형 상태 나라 ... 1 (436)이 같은 것을 가지고 결과를 가지고 싶습니다

내 문제는 두 개 이상의 숫자가있는 ID입니다 (이 ID는 2 개의 숫자 만 사용) 저는 보통 mysql에서 extractvalue 함수를 사용할 수 있지만이 경우에는 제 밧줄 끝에 있습니다.

감사

+1

[당신이 시도 무엇?] (http://www.whathaveyoutried.com/) –

+0

SUBSTRING_INDEX, 위치, extract_value와 SAS의 일부 배열,하지만 여전히 내가 원하는 솔루션을하지 않았다 : - ( – JPC

+0

) 누군가 SAS를 사용하여이 작업을 수행 할 수있는 방법을 생각해 낼 수는 있지만 Perl이나 Python과 같은 것을 사용하여 데이터를 처리하고 SAS로 읽기 쉬운 방식으로 형식을 지정하는 것이 훨씬 쉽습니다. – itzy

답변

0
data work.parsed; 
    infile cards; 
    input; 

    length line_str $32000 rec_str $800 number type state country tx zip msa $100 elemname $32; 

    line_str = compress(_infile_, '"'); /* remove quotes */ 
    line_str = translate(line_str, ':', ','); /* make : a key:value separator */ 

    keep id number type state country tx zip msa; 
    id = _N_; 
    rec_count=countc(line_str, '{'); 

    array elem {*} $ number type state country tx zip msa;/* order is important */ 

    put rec_count=; 
    do r=1 to rec_count; 
     if r = 1 then rec_start=3; 
      else rec_start = rec_end + 4; 
     rec_end = findc(line_str, '}', rec_start) - 1; 

     rec_str=substr(line_str, rec_start, rec_end - rec_start + 1); 

     do i=1 to dim(elem); 
      elemname = vname(elem(i)); 
      elem(i)= scan(rec_str, i * 2, ':');/* this way relying on all elements provided in record in expected order */ 
      if findc(elem(i), '}') > 0 then elem(i) = substr(elem(i), 1, findc(elem(i), '}') - 1); 
     end; 
     output; 
    end; 
    cards; 
    [{"number":"8457215152","type":"Cell","state":"LA","country":"US","tz":"CT","zip":"70546","msa":"0"},{"number":"4363685555","type":"Cell","state":"LA","country":"US","tz":"CT","zip":"70546","msa":"2"},{"number":"33333","type":"Cell","state":"CA","country":"US","tz":"CT","zip":"33333","msa":"3"}] 
    ; 
    run; 

은 분명히이 데이터가 어떻게 생겼는지에 몇 가지 가정이있다. HTH Vasja