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
[당신이 시도 무엇?] (http://www.whathaveyoutried.com/) –
SUBSTRING_INDEX, 위치, extract_value와 SAS의 일부 배열,하지만 여전히 내가 원하는 솔루션을하지 않았다 : - ( – JPC
) 누군가 SAS를 사용하여이 작업을 수행 할 수있는 방법을 생각해 낼 수는 있지만 Perl이나 Python과 같은 것을 사용하여 데이터를 처리하고 SAS로 읽기 쉬운 방식으로 형식을 지정하는 것이 훨씬 쉽습니다. – itzy