Veröffentlicht am :
ETL EXTERNE

Extraktion statistischer Daten aus der KOSIS API

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
Dieses SAS©-Skript definiert und verwendet ein Makro '%json', um eine Web-API (kosis.kr) über PROC HTTP abzufragen. Es iteriert über einen Jahresbereich, um statistische Daten abzurufen. Jede JSON-Antwort von der API wird mit der LIBNAME JSON-Engine gelesen, mittels PROC TRANSPOSE transformiert und dann einer finalen SAS©-Tabelle hinzugefügt. Das Skript führt zwei Extraktionen für verschiedene geografische Ebenen (Bundesland und Stadt) durch und endet mit einer Bereinigung der Variablen der Tabelle 'data_city'.
Datenanalyse

Type : EXTERNE


Die Daten werden vollständig über Aufrufe der KOSIS Web-API (Korean Statistical Information Service) aus einer externen Quelle abgerufen. Das Skript hängt nicht von vorab existierenden Daten ab.

1 Codeblock
%LET / LIBNAME
Erklärung :
Initialisierung globaler Makrovariablen. 'lib' definiert den Ausgabepfad, 'String01' enthält einen API-Schlüssel, 'var_want' listet die zu behaltenden Spalten auf. Ein 'json'-Libname wird dem Ausgabepfad zugewiesen, um SAS-Tabellen zu speichern.
Kopiert!
1%let lib=C:\Json\;
2%let String01=NjdhZTg3ZTM1OGEzZGMyOGIyZWE0ZmIxZTBiMDg0ZTg=;/*apiKey*/
3%let var_want=PRD_DE/*연도*/ C1 C1_NM C3_NM/*연령*/ DT/*수*/;/*원하는 변수만 남기기, 전부 남기고 싶으면 공란*/
4LIBNAME json "&lib";
2 Codeblock
Macro Data
Erklärung :
Definition des Makros '%json'. Dieses Makro iteriert über einen Datumsbereich, konstruiert für jede Iteration eine URL für die KOSIS-API, führt einen PROC HTTP aus, um die JSON-Daten abzurufen, liest diese mit LIBNAME JSON, transformiert sie mit PROC TRANSPOSE zum Pivotieren und sammelt sie in einer finalen SAS-Tabelle.
Kopiert!
1%macro json(data_final, String02, String03, String04, String05, String06, String07, String08, String09, String10, String11, String12, String13, String14, date_s, date_e);
2DATA "&lib.&data_final";RUN;
3 %DO date_want=&date_s %to &date_e;
4 %let url=http://kosis.kr/openapi/Param/statisticsParameterData.DO?method=getList&apiKey=&String01&itmId=&String12&objL1=&String04&objL2=&String05&objL3=&String06&objL4=&String07&objL5=&String08&objL6=&String09&objL7=&String10&objL8=&String11&FORMAT=json&jsonVD=Y&prdSe=&String14&startPrdDe=&date_want&endPrdDe=&date_want&loadGubun=&String13&orgId=&String02&tblId=&String03;
5 
6 filename out temp;PROC HTTP url="&url" method="get" out=out;RUN;
7 LIBNAME raw json fileref=out;
8 
9 DATA "&lib.temp";SET raw.alldata;IF p1='TBL_NM' THEN group+1;/*자동으로 p1의 첫번째 값을 'TBL_NM'대신 들어가도록 하는 방법을 못 찾겠습니다.*/RUN;
10 
11 PROC TRANSPOSE DATA="&lib.temp" out="&lib.data_one"(drop=_:);BY group;id P1;var Value;RUN;
12 
13 DATA "&lib.data_one";SET "&lib.data_one"(keep=&var_want);RUN;
14 
15 DATA "&lib.&data_final";SET "&lib.&data_final" "&lib.data_one";RUN;
16 %END;
17DATA "&lib.&data_final";SET "&lib.&data_final";IF _n_=1 THEN delete;RUN;
18%mend;
3 Codeblock
Macro Call Data
Erklärung :
Zweimaliger Aufruf des Makros '%json'. Der erste Aufruf lädt statistische Daten auf Bundeslandebene ('data_state') herunter. Der zweite Aufruf lädt Daten auf Stadtebene ('data_city') herunter. Beide Extraktionen umfassen den Zeitraum von 1993 bis 2017.
Kopiert!
1%json(data_final=data_state, /*orgId*/String02=101, /*tblId*/ String03=DT_1B040M1, /*objL1*/String04=00+11+21+22+23+24+25+26+29+31+32+33+34+35+36+37+38+39, /*objL2*/String05=0, /*objL3*/String06=ALL, /*objL4*/String07=,/*objL5*/String08=, /*objL6*/String09=, /*objL7*/String10=, /*objL8*/String11=, /*itmId*/String12=all, /*loadGubun*/String13=2, /*prdSe*/String14=Y, date_s=1993, date_e=2017);
2%json(data_final=data_city, /*orgId*/String02=101, /*tblId*/ String03=DT_1B040M1, /*objL1*/String04=all, /*objL2*/String05=0, /*objL3*/String06=ALL, /*objL4*/String07=,/*objL5*/String08=, /*objL6*/String09=, /*objL7*/String10=, /*objL8*/String11=, /*itmId*/String12=all, /*loadGubun*/String13=2, /*prdSe*/String14=Y, date_s=1993, date_e=2017);
3 
4 Codeblock
DATA STEP Data
Erklärung :
Dieser letzte DATA STEP modifiziert die Tabelle 'json.data_city'. Er benennt die Spalten in explizitere Namen um (Year, Div, Old, Num), konvertiert numerische Variablen, die als Text gespeichert sind, in ein numerisches Format und wählt die finalen Spalten für die Analyse aus.
Kopiert!
1DATA json.data_city;
2SET json.data_city;
3Year=PRD_DE+0;/*연도*/
4Div_num=C1;
5Div=C1_NM;
6Old=C3_NM;
7Num=DT+0;/*수*/
8keep Year Div_num Div Old Num;
9RUN;
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.