*! version on 0.1 29mar2011 * Thanks to Kit for suggesting a stata-ish array * Wouldn't it be nice if stata had perl style hashes: $code{BRD} => "314922f1d7121efc4cd0e4c915113ad2" /* The Board of Governors of the Federal Reserve Board website http://www.federalreserve.gov is a good example of data provisioning. They support SDMX, automated systems etc. If you want to know more use the site. This program is for stata users who want to acquire data online. http://www.federalreserve.gov/datadownload/Output.aspx? *no stata user exposure rel=H10 & *no stata user exposure series=bffd94e6e03cd78961a5074a37c634bf & *these are the comparison baskets * defaults to EUR. lastObs=7 & * expose as last(), assume it per * default and set it equal to 7. from= & * expose as from() to= & * expose as to() filetype=csv & *no stata user exposure label=include & *no stata user exposure layout=seriescolumn *no stata user exposure usd anything(name=basket), [last(integer)] [from(string)] [to(string)] */ program def usd, rclass version 9.0 syntax anything(name=basket) quietly { local out = 0 set more off local url = "http://www.federalreserve.gov/datadownload/Output.aspx" local hidden = "filetype=csv&label=include&layout=seriescolumn&rel=H10" local bailout = 1 *Broad currency index (Mar 73 = 100) local series1 "314922f1d7121efc4cd0e4c915113ad2" *Major currency index (Mar 73 = 100) local series2 "a660e724c705cea4b7bd1d1b85789862" *OITP currency index (Jan 97 = 100) local series3 "fac88a7fcbe51b58144e39a6ab770cdb" *Australia / U.S. Dollars per Australian Dollar local series4 "91c3fa18b51a37d6c8bb96f5263c9409" *Brazil / Real local series5 "e9ee4ef1e0a912f189d364c8ae586f31" *Canada / Canadian Dollar local series6 "8dbf1cd36883b94bdd6d7ff96c9eed66" *China / Yuan Renminbi local series7 "356f2a973bbb516442c693dc19615b69" *Denmark / Danish Krone local series8 "a3220d269bb3c9c5e2fffa49160c8cdf" *Euro Area / U.S. Dollars per Euro local series9 "15ba55e8f5302d7efe51819c57682787" *Hong Kong / Hong Kong Dollar local series10 = "936452568eda89add10d8be1614fde14" *India / Indian Rupee local series11 "3604f6e0c01fd1a3275b2de1f6547cb6" *Japan / Yen local series12 "1e182bb4a226cda2b7a8593472bac48f" *Maldives / Rufiyaa local series13 "04f721fc401aafb906314b10a4a4148e" *Mexico / Mexican Peso local series14 "b23e56a43a4fe0a996e9e2418bdbc2a8" *New Zealand / U.S. Dollars per New Zealand Dollar local series15 "9493da55f17cfd1c95661ed788dc57ea" *Norway / Norwegian Krone local series16 "18213d9f27127cedf21ea205d9ecfbde" *Singapore / Singapore Dollar local series17 "35a6a2ef41f1533f6b3ccf4ea1560478" *South Africa / Rand (financial) local series18 "6462f3e1922d7c78bb07d6548e96c35d" *South Korea / Republic of Korean Won local series19 "fe4164996f92a3285ff9270a1e964d09" *Sri Lanka / Sri Lankan Rupee local series20 "3b13f2441d71604b1ccde2b75d8faf20" *Sweden / Swedish Krona local series21 "ef04041e538b0a622a77e9ba98cded0d" *Switzerland / Swiss Franc local series22 "f838388dca2fd4e8bdfb846f3d2c35df" *Taiwan / Taiwan Dollar local series23 "b0919b362d9db43d59ed03dea48a4c2f" *Thailand / Baht local series24 "3b80d38ac8a348cc4bb83da02413219f" *United Kingdom / U.S Dollars per Pound Sterling local series25 "3777001afbcc5b173e81a2055241b679" *Venezuela / Bolivar local series26 "43571458390b748e2c7a855985efcac7" loc codes BRD MJC OIT AUD BRL CAD CNY DKK EUR HKD INR JPY MVR MXN NZD NOK SGD ZAL KRW LKR SEK CHF TWD THB GBP VEB loc nc: word count `codes' forv i=1/`nc' { loc c: word `i' of `codes' if regexm(upper("`basket'"), "`c'") { loc series `series`i'' loc bailout 0 } } } if `bailout' { di "Say something like {stata usd EUR: usd EUR}. Perhaps read {stata help usd: help usd}?" as smcl error 198 exit } quietly{ *now we have the comparison currency. ready to get the data. tempfile raw copy "`url'?`hidden'&lastObs=`last'&from=`from'&to=`to'&series=`series'" `raw' insheet using `raw' local tmp = v2[1] label data `"`tmp'"' *we return the metadata forvalues i=1(1)6 { local a = v1[`i'] local b = v2[`i'] local c = `"`a' `b'"' return local md`i' = `"`c'"' } keep if _n >6 rename v2 rate replace rate = regexr(rate,"ND",".") destring rate, replace split v1,parse(-) gen y=v11 gen m=v12 gen d=v13 destring y, replace destring m, replace destring d, replace destring v11, replace destring v12, replace destring v13, replace gen date = mdy(v12,v13,v11) format date %td drop v* label var rate "`basket'" } end