Publicado el :
ETL EXTERNE

Extracción de datos estadísticos de la API KOSIS

Este código también está disponible en: Deutsch English Français
En espera de validación
Este script SAS© define y utiliza una macro '%json' para consultar una API web (kosis.kr) a través de PROC HTTP. Itera sobre un rango de años para recuperar datos estadísticos. Cada respuesta JSON de la API se lee con el motor LIBNAME JSON, se transforma usando PROC TRANSPOSE y luego se agrega a una tabla SAS© final. El script realiza dos extracciones para diferentes niveles geográficos (estado y ciudad) y termina con una limpieza de las variables de la tabla 'data_city'.
Análisis de datos

Type : EXTERNE


Los datos se recuperan completamente de una fuente externa a través de llamadas a la API web de KOSIS (Korean Statistical Information Service). El script no depende de datos preexistentes.

1 Bloque de código
%LET / LIBNAME
Explicación :
Inicialización de las variables macro globales. 'lib' define la ruta de salida, 'String01' contiene una clave API, 'var_want' lista las columnas a conservar. Se asigna una etiqueta 'json' a la ruta de salida para guardar las tablas SAS.
¡Copiado!
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 Bloque de código
Macro Data
Explicación :
Definición de la macro '%json'. Esta macro itera sobre un rango de fechas, construye una URL para la API KOSIS en cada iteración, ejecuta un PROC HTTP para recuperar los datos JSON, los lee con LIBNAME JSON, los transforma con PROC TRANSPOSE para pivotarlos y los acumula en una tabla SAS final.
¡Copiado!
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 Bloque de código
Macro Call Data
Explicación :
Llamada a la macro '%json' dos veces. La primera llamada descarga los datos estadísticos a nivel estatal ('data_state'). La segunda llamada descarga los datos a nivel de ciudad ('data_city'). Ambas extracciones cubren el período de 1993 a 2017.
¡Copiado!
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 Bloque de código
DATA STEP Data
Explicación :
Este último DATA STEP modifica la tabla 'json.data_city'. Renombra las columnas con nombres más explícitos (Year, Div, Old, Num), convierte las variables numéricas almacenadas como texto a un formato numérico y selecciona las columnas finales para el análisis.
¡Copiado!
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;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.