program define _getmxdatabie syntax anything(name=vars) , [ key(string) ] qui{ local tokenbie `key' tempfile f1 f2 varbase meta1 meta2 meta3 meta4 gettoken next :vars local j=1 while `"`next'"' != "" { gettoken varname vars:vars local varname `varname' local link "https://www.inegi.org.mx/app/api/indicadores/desarrolladores/jsonxml/INDICATOR/`varname'/es/0700/false/BIE/2.0/`tokenbie'?type=json" copy "`link'" `f1', replace filefilter `f1' `f2', from("{") to(\r) replace import delimited using `f2', delim(":,") stripquotes(yes) clear set type double split v2, parse("/") gen(fecha) gen double indicador=real(v4) if _n>3 local frecuencia = v4[3] if `frecuencia'!=3{ gen year=real(fecha1) if _n>3 gen freq=real(fecha2) } else { gen year=real(fecha1) if _n>3 } local indicador = v2[3] *local fuente = v12[3] local unidades = v8[3] if `j'==1{ local freqmaster = v4[3] } local diffreq=`frecuencia'-`freqmaster' if `diffreq'!=0{ di as err "error: variables must have same frecuency" clear exit 498 } drop if indicador==. if `frecuencia'!=3{ keep indicador year freq v2 } else { keep indicador year v2 } rename v2 Periodo rename indicador v_`varname' * read freq if `frecuencia'==3{ gen fecha=year drop year } else if `frecuencia'==6{ gen fecha=yq(year,freq) format fecha %tq drop year freq } else if `frecuencia'==8{ gen fecha=ym(year,freq) format fecha %tm drop year freq } order Periodo fecha v* *metadata preserve local link "https://www.inegi.org.mx/app/api/indicadores/desarrolladores/jsonxml/CL_INDICATOR/`varname'/es/BIE/2.0/`tokenbie'?type=json" copy "`link'" `meta1', replace filefilter `meta1' `meta2', from("[") to(\r) replace local link "https://www.inegi.org.mx/app/api/indicadores/desarrolladores/jsonxml/CL_UNIT/`unidades'/es/BIE/2.0/`tokenbie'?type=json" copy "`link'" `meta3', replace filefilter `meta3' `meta4', from("[") to(\r) replace import delimited using `meta2', delim(":}") stripquotes(yes) clear local varlabel = inegiversion[1] import delimited using `meta4', delim(":}") stripquotes(yes) clear local unidlabel = inegiversion[1] restore label var v_`varname' "`varlabel', `unidlabel'" capture merge 1:1 fecha using `varbase' capture drop _merge gettoken next :vars, quotes sort fecha recast strL Periodo save `varbase', replace local ++j } } di in green "`=`j'+1' variables, `=_N' obs" end