/**********************************************************************************************************************************
DISCLAIMER: The World Economic Forum is the provider of the Global Competitiveness Index 2017-2018, a framework and a corresponding set of indicators for 137 economies. The software gciget.ado provides a practical way to read the indicators into Stata (R). The responsibility of complying with the terms and conditions of use under which the owner of the data grants access to the indicators is entirely with the user but not with the authors of the software gciget.ado. Any user of gciget.ado is responsible for making him or herself familiar with the terms of use under which she or he is allowed to work with the data of the Global Competitiveness Index. For more information and methodology, please see "`disclink'". In no event will the authors, owners, and creators of gciget.ado, or their employers or any other party who may modify and/or redistribute this software, accept liability for any loss or damage suffered as a result of using the gciget.ado software.
**********************************************************************************************************************************/

***********************************************************************************************************************************
* Obtaining varibles from http://reports.weforum.org/global-competitiveness-index-2017-2018/downloads/
***********************************************************************************************************************************
*! version 1.4 2018-05-23
*! version 1.3 2018-05-11
*! version 1.2 2018-05-06
*! version 1.1 2018-04-27
*! version 1.0 2018-04-26
*! authors Harald Tauchmann & Oleg Badunenko
capture program drop gciget
program gciget, nclass
	version 12.1
    syntax [anything], [CLEAR] [noXTset] [noWARNings] [noQUERY] [PANELVar(name)] [URL(string asis)] [SHEET(string asis)] [CELLRANGE(string asis)]
    tempfile mydataraw myrunningfile myexcelfile mydatarawcn olddata
    ** DISPLAY DISCLAIMER **
    local ls = c(linesize)+0
    local disclink "in smcl `"{browse "http://wef.ch/gcr17":http://wef.ch/gcr17}"'"
    local discdata "The World Economic Forum is the provider of the Global Competitiveness Index 2017-2018, a framework and a corresponding set of indicators for 137 economies. The software gciget.ado provides a practical way to read the indicators into Stata (R). The responsibility of complying with the terms and conditions of use under which the owner of the data grants access to the indicators is entirely with the user but not with the authors of the software gciget.ado. Any user of gciget.ado is responsible for making him or herself familiar with the terms of use under which she or he is allowed to work with the data of the Global Competitiveness Index. For more information and methodology, please see "`disclink'". In no event will the authors, owners, and creators of gciget.ado, or their employers or any other party who may modify and/or redistribute this software, accept liability for any loss or damage suffered as a result of using the gciget.ado software."
    if c(noisily) == 0 {
        local dstyle1 "input"
        local dstyle2 "text"
    }
    else {
        local dstyle1 "text"
        local dstyle2 "input"
    }
    noisily di as `dstyle1' _newline "{p 0 2 2 `ls'}DISCLAIMER: `discdata'{p_end}" _newline
    if "`anything'" != "" {
		local mynamelist = subinstr("`anything'",".","_",.)
	}
    if "`url'" == "" | "`url'" == "http://www3.weforum.org/docs/GCR2017-2018/GCI_Dataset_2007-2017.xlsx" {
        local url "http://www3.weforum.org/docs/GCR2017-2018/GCI_Dataset_2007-2017.xlsx"
    }
    else {
        if "`warnings'" != "nowarnings" {
            di as error "{p 0 2 2 `ls'}warning: you have specified a download link that differs from the default; make sure that this link is valid{p_end}"
        }
    }
    local lru = strreverse("`url'")
    local lru : subinstr local lru "\" "/", all
    gettoken lecxe link : lru, parse("/")
    local excel = strreverse("`lecxe'")
    if "`sheet'" == "" | "`sheet'" == "Data" {
        local sheet "Data"
    }
    else {
        if "`warnings'" != "nowarnings" {
            di as error "{p 0 2 2 `ls'}warning: you have specified an excel sheet that differs from the default; make sure that the sheet is valid{p_end}"
        }
    }
    if "`cellrange'" == "" | "`cellrange'" == "A3:FM6527" {
        local cellrange "A3:FM6527"
    }
    else {
        if "`warnings'" != "nowarnings" {
            di as error "{p 0 2 2 `ls'}warning: you have specified a cell range that differs from the default; make sure that the sheet is valid; if not, the results are unpredictable{p_end}"
        }
    }
	local novars = c(k) == 0
	if ("`clear'" == "clear") {
        if(`novars' == 0){
            qui save `olddata'
        }
		clear
	}
	if (`novars' == 0) & "`clear'" != "clear" {
		display as error "no; data in memory would be lost"
		exit 4
	}
	di as txt "Downloading the " as `dstyle2' "`excel'" as txt " file"
	capture copy "`url'" `myexcelfile', replace
	if _rc != 0 {
        if "`url'" == "http://www3.weforum.org/docs/GCR2017-2018/GCI_Dataset_2007-2017.xlsx" {
            display as error "Could not download excel file from http://reports.weforum.org/global-competitiveness-index-2017-2018/downloads/"
        }
        else {
		  display as error "Could not download excel file from `url'"
        }
        if "`clear'" == "clear" & `novars' == 0 {
            use `olddata', clear
        }
 		exit _rc
	}
	di as txt "Importing the " as `dstyle2' "`excel'" as txt " file"
	cap import excel `myexcelfile', sheet("`sheet'") cellrange(`cellrange') firstrow clear
    if _rc != 0 {
        di as error "{p 0 2 2 `ls'}import of GCI data failed; check structure of the excel file `excel'{p_end}"
        if "`clear'" == "clear" & `novars' == 0 {
            use `olddata', clear
        }
 		exit _rc
    }
	qui drop in 1
	qui keep if Attribute == "Value"
	qui drop Placement Dataset Seriescode Seriesunindented Attribute FE GCREAP GCRMENA GCRLATAM GCREUROPENA GCREURASIA GCRSSA GCRSASIA FM
	g year = substr(Edition,1,4)
	qui replace GLOBALID = subinstr(GLOBALID,".","_",.)
	qui levelsof GLOBALID, local(uniqVarList) separate(" ")
	*di `uniqVarList'
    if "`anything'" != "" {
        local mylist: list uniqVarList & mynamelist
        if "`mylist'" == "" {
            display as error "no requested variable found in GCI"
            clear
            if "`clear'" == "clear" & `novars' == 0 {
                use `olddata', clear
            }
            exit 111
        }
    }
    else {
        local mylist "`uniqVarList'"
    }

	qui drop Edition
	order year
	qui destring year, replace
	qui save `mydataraw', replace

	* get the country names and charecteristics
	import excel `myexcelfile', sheet("Entities") cellrange(A3:F155) first clear
	ren Entitycode 	countrycode
	lab var countrycode "Country code"
	ren Entity country
	lab var country "Country"
	drop Entitytype
	ren IncomegroupWorldBankJuly2 imfincgroup
	lab var imfincgroup "Income group (World Bank, July 2016)"
	ren RegionIMFApril2016 imfregion
	lab var imfregion "Region (IMF, April 2016)"
	ren Forumclassification wefregion
	lab var wefregion "World Economic Forum classification"
	qui save `mydatarawcn', replace

    local varcount = 0
	foreach var of local mylist {
        local varcount = `varcount'+1
        tempfile _myfilename`varcount'
        local _mytemplist "`_mytemplist' `_myfilename`varcount''"
		* open all
		use `mydataraw', clear
		*display "Current variable is " as result "`var'"
		local varname = subinstr("`var'",".","_",.)
		*di "`myfilename'"
		*work with only one var at a time
		qui keep if GLOBALID == "`var'"
		drop GLOBALID
		qui destring, replace
		qui save `myrunningfile', replace
		local mylabel = Series[1]
		*di "`mylabel'"
		local mylabel = strltrim("`mylabel'")
		*di "`mylabel'"
		display as text "Processing " as `dstyle2' "`var'" as text ":  " as res "`mylabel'"
		* work over years
		qui su year
		local year_b `r(min)'
		local year_c `r(max)'
		forval time = `year_b'/`year_c'{
		*di `time'
		use `myrunningfile', clear
		qui keep if year == `time'
		* transpose
		xpose, clear varname
		g year = `time'
		order year _varname v1
		ren _varname countrycode
		qui drop if countrycode == "Series"
		qui drop if countrycode == "year"
		label var v1 "`mylabel'"
		ren v1 `varname'
		if `time' == `year_b'{
			qui save  "`_myfilename`varcount''", replace
		}
		else {
			qui append using "`_myfilename`varcount''"
		}
		sort year countrycode
		qui save "`_myfilename`varcount''", replace
		}
	}
 	qui merge year countrycode using `_mytemplist'
 	drop _merge*
 	lab var countrycode "Country code"
 	lab var year "Year"

	qui merge m:1 countrycode using `mydatarawcn'
	drop _merge*
    if "`xtset'" != "noxtset" {
        if "`panelvar'" != "" {
            cap confirm new variable `panelvar'
            if _rc == 110 {
                di as error "{p 0 2 2 `ls'}variable {bf:`panelvar'} alreday defined; name of panelvar set to default{p_end}"
                local panelvar "cnNumber"
            }
            if _rc == 198 {
                di as error "{p 0 2 2 `ls'}{bf:`panelvar'} invalid varname; name of panelvar set to default{p_end}"
                local panelvar "cnNumber"
            }
        }
        else {
            local panelvar "cnNumber"
        }
    	egen `panelvar' = group(countrycode)
    	order year `panelvar' countrycode country imfincgroup imfregion wefregion
    	qui xtset `panelvar' year, `query' yearly
    }
    else {
        order year countrycode country imfincgroup imfregion wefregion
    }
	sort countrycode year
end