Publié le :
ETL EXTERNE

Extraction de données statistiques de l'API KOSIS

Ce code est également disponible en : Deutsch English Español
En attente de validation
Ce script SAS© définit et utilise une macro '%json' pour interroger une API web (kosis.kr) via PROC HTTP. Il boucle sur une plage d'années pour récupérer des données statistiques. Chaque réponse JSON de l'API est lue avec l'moteur LIBNAME JSON, transformée à l'aide de PROC TRANSPOSE, puis ajoutée à une table SAS© finale. Le script effectue deux extractions pour différents niveaux géographiques (état et ville) et termine par un nettoyage des variables de la table 'data_city'.
Analyse des données

Type : EXTERNE


Les données sont entièrement récupérées depuis une source externe via des appels à l'API web de KOSIS (Korean Statistical Information Service). Le script ne dépend pas de données préexistantes.

1 Bloc de code
%LET / LIBNAME
Explication :
Initialisation des variables macro globales. 'lib' définit le chemin de sortie, 'String01' contient une clé API, 'var_want' liste les colonnes à conserver. Un libellé 'json' est assigné au chemin de sortie pour sauvegarder les tables SAS.
Copié !
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 Bloc de code
Macro Data
Explication :
Définition de la macro '%json'. Cette macro itère sur une plage de dates, construit une URL pour l'API KOSIS à chaque itération, exécute un PROC HTTP pour récupérer les données JSON, les lit avec LIBNAME JSON, les transforme avec PROC TRANSPOSE pour les pivoter, et les accumule dans une table SAS finale.
Copié !
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 Bloc de code
Macro Call Data
Explication :
Appel de la macro '%json' à deux reprises. Le premier appel télécharge les données statistiques au niveau de l'état ('data_state'). Le second appel télécharge les données au niveau de la ville ('data_city'). Les deux extractions couvrent la période de 1993 à 2017.
Copié !
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 Bloc de code
DATA STEP Data
Explication :
Ce dernier DATA STEP modifie la table 'json.data_city'. Il renomme les colonnes avec des noms plus explicites (Year, Div, Old, Num), convertit les variables numériques stockées en texte vers un format numérique, et sélectionne les colonnes finales pour l'analyse.
Copié !
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;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.