2016-07-27 3 views
2

SAS를 사용하여 Json 파일을 처음으로 구문 분석하려고합니다. 인터넷에서 일부 스크립트를 발견하고 SAS에서이 코드를 시도했지만 내 JSON 데이터 파일에서 작동하지 못했습니다. 여기 Json 파일을 SAS로 구문 분석

data parsed; 
infile data lrecl=32000 truncover scanover dlm=","; 
input @'"driver_id":{' driver_id $255. 
    @'"publication_site_id":{' publication_site_id $255. 
    @'"confirmed_seat_count":{' confirmed_seat_count $255. 
    @'"published_date":{' published_date $255. 
    @'"trip_date":{' trip_date $255. 
    @'"first_publication_date":{' first_publication_date $255. 
    @'"profile_picture_added_date":{' profile_picture_added_date $255.; 

driver_id=scan(driver_id, 1, '",'); 
published_date=scan(published_date, 1, '",'); 
trip_date =scan(trip_date, 1, '",'); 
publication_site_id=scan(publication_site_id, 1, '",'); 
confirmed_seat_count =scan(confirmed_seat_count, 1, '",'); 
first_publication_date =scan(first_publication_date, 1, '",'); 
profile_picture_added_date =scan(profile_picture_added_date, 1, '",'); 
run; 

내가 도움에 매우 감사하고 내 JSON 파일

{ 
"driver_id": {"0":11450650,"1":4705453,"2":,"3":4892472,"4":47572650,"5":5242675}, 
"publication_site_id":{"0":1056,"1":1056,"2":1056,"3":5056,"4":1056,"5":1056}, 
"confirmed_seat_count":{"0":2.0,"1":0.0,"2":1.0,"3":0.0,"4":0.0,"5":0.0}, 
"published_date":{"0":"2015-06-16 00:00:00","1":"2015-06-16 00:00:00","2":"2015-06-16 00:00:00","3":"2015-06-16 00:00:00","4":"2015-06-16 00:00:00","5":"2015-06-16 00:00:00"}, 
"trip_date":{"0":"2015-06-21 19:00:00","1":"2015-06-21 12:00:00","2":"2015-06-19 17:00:00","3":"2015-06-17 15:30:23","4":"2015-06-21 15:00:00","5":"2015-06-21 17:00:00"}, 
"first_publication_date":{"0":"2015-01-10 00:00:00","1":"2014-01-25 00:00:00","2":"2014-12-22 00:00:00","3":"2014-10-22 00:00:00","4":"2015-06-16 00:00:00","5":"2014-11-20 00:00:00"}, 
"profile_picture_added_date":{"0":null,"1":null,"2":"2015-09-22 00:00:00","3":"2013-11-19 00:00:00","4":"2015-06-17 00:00:00","5":null} 
} 

의 개요입니다.

감사 SM

+0

어떤 SAS 버전을 사용하고 있습니까? – Altons

답변

1

이 당신의 방법에 당신을 도움이 될 것입니다 (이 자체가 구분되는 내부 개체를 유지 할 수 있도록) 나는 분리 문자를 업데이트

options noquotelenmax; 
filename data temp lrecl=32000; 

data _null_; 
file data; 
put '{ 
"driver_id": {"0":11450650,"1":4705453,"2":,"3":4892472,"4":47572650,"5":5242675}, 
"publication_site_id":{"0":1056,"1":1056,"2":1056,"3":5056,"4":1056,"5":1056}, 
"confirmed_seat_count":{"0":2.0,"1":0.0,"2":1.0,"3":0.0,"4":0.0,"5":0.0}, 
"published_date":{"0":"2015-06-16 00:00:00","1":"2015-06-16 00:00:00","2":"2015-06-16 00:00:00","3":"2015-06-16 00:00:00","4":"2015-06-16 00:00:00","5":"2015-06-16 00:00:00"}, 
"trip_date":{"0":"2015-06-21 19:00:00","1":"2015-06-21 12:00:00","2":"2015-06-19 17:00:00","3":"2015-06-17 15:30:23","4":"2015-06-21 15:00:00","5":"2015-06-21 17:00:00"}, 
"first_publication_date":{"0":"2015-01-10 00:00:00","1":"2014-01-25 00:00:00","2":"2014-12-22 00:00:00","3":"2014-10-22 00:00:00","4":"2015-06-16 00:00:00","5":"2014-11-20 00:00:00"}, 
"profile_picture_added_date":{"0":null,"1":null,"2":"2015-09-22 00:00:00","3":"2013-11-19 00:00:00","4":"2015-06-17 00:00:00","5":null} 
}'; 
run; 

data parsed; 
infile data lrecl=32000 truncover scanover dlm='}' ; 
input @'"driver_id": {' driver_id: $255. 
    @'"publication_site_id":{' publication_site_id: $255. 
    @'"confirmed_seat_count":{' confirmed_seat_count: $255. 
    @'"published_date":{' published_date: $255. 
    @'"trip_date":{' trip_date: $255. 
    @'"first_publication_date":{' first_publication_date: $255. 
    @'"profile_picture_added_date":{' profile_picture_added_date: [email protected]@; 
run; 

는 콜론 입력 수정을 추가 ("비어 있지 않은 다음 빈 컬럼에서 읽기 시작"이라고 말하면서 비표준 값을 읽을 수 있습니다.) 후속 관측을 출력하기위한 레코드를 보관하기 위해 @@ 후행 컬럼 포인터로 끝납니다 (json은 하나의 긴 스트림으로 도착합니다) . 오, 나는 또한 @'"driver_id": {'을위한 공간을 추가했다 - 이것은 오타 였는가?

스캔 부분을 생략 했으므로이 부분을 제어 할 수 있습니다.

1

내 최고의 작품이 아니지만 당신이 무엇을하고 줄 것입니다!. 열과 dq 비트를 재구성해야하지만 JSON은 SAS 데이터 세트로 보입니다. 나는 당신이 파이썬 pandas 패키지를 볼 것을 권 해드립니다. pandas을 사용하면이 코드를 한 줄로 정렬 할 수 있습니다.

data parsed; 
infile "/your_path/test.json" lrecl=32500 truncover scanover dlm="," firstobs=2; 
input @'"driver_id"' _driver_id $255. 
     @'"publication_site_id"' _publication_site_id $255. 
     @'"confirmed_seat_count"' _confirmed_seat_count $255. 
     @'"published_date"' _published_date $255. 
     @'"trip_date"' _trip_date $255. 
     @'"first_publication_date"' _first_publication_date $255. 
     @'"profile_picture_added_date"' _profile_picture_added_date $255.; 
array v{*} _:; 
do i=1 to dim(v); 
    v[i]=prxchange('s/"\d+"//',-1,v[i]); 
    v[i]=compress(v[i],'{}"'); 
    v[i]=substr(v[i],3); 
end; 
run; 

proc transpose data=parsed out=t_parsed ; 
var _:; 
run; 

data want(drop=i); 
set t_parsed; 
array split(6) $50.; 
do i=1 to dim(split); 
split[i] = scan(col1,i,','); 
end; 
run; 

proc sort data=want; by _name_;run; 

proc transpose data=want out=want_t(drop=_name_); 
var split:; 
id _name_; 
run;