*! version 1.0.2 16sep2005 program define _freduse2 version 9.0 syntax using/ , /// [ /// clear /// ] if ("`clear'" != "") { `clear' } tempname fh file open `fh' using `"`using'"', read *--------------------------------------------------------------------------------- * Get rid of the header and get to the data table *--------------------------------------------------------------------------------- * First look for the end of the header local line = "" while (`"`line'"' != "") { * read a line file read `fh' line local line = trim(`"`line'"') } * Then look for the opening of the first table while (!regexm(`"`line'"', ".*") { * read in full tr (while not found yet read in) local tr `line' while (`"`line'"' != "") { file read `fh' line local line = trim(`"`line'"') local tr `tr' `line' } * parse characteristic name and data assert regexm(`"`tr'"', ".*(.*)<\/th>.*(.*)<\/td>.*") * store info if (regexs(1) == "Series ID") local vname = regexs(2) else if (regexs(1) == "Title") local vlab = regexs(2) else { local ++c local cat`c' = subinstr(regexs(1), " ", "_", .) local desc`c' = regexs(2) } } * otherwise repeat } * Set up the variables and store the characteristics qui set obs 0 gen strL date = "" gen double `vname' = 0.0 label var `vname' `"`vlab'"' foreach i of numlist 1/`c' { char define `vname'[`cat`i''] `"`desc`i''"' } *--------------------------------------------------------------------------------- * Parse the second table *--------------------------------------------------------------------------------- * Outer while loop looking for end of table local line = "" while (`"`line'"' != "") { * Read in line file read `fh' line local line = trim(`"`line'"') * If thead, read in full and then continue outer while loop if (`"`line'"' == "") { while (`"`line'"' != "") { file read `fh' line local line = trim(`"`line'"') } continue } * If tr, read in full, parse date and datapoint if (`"`line'"' == "") { * read in full tr (while not found yet read in) local tr `line' while (`"`line'"' != "") { file read `fh' line local line = trim(`"`line'"') local tr `tr' `line' } * parse date and datapoint assert regexm(`"`tr'"', ".*(.*)<\/th>.*(.*)<\/td>.*") * add a datapoint with insobs, set values with replace ... in L qui insobs 1 qui replace date = regexs(1) in L qui replace `vname' = real(regexs(2)) in L } * Otherwise repeat } * Create a stata-formatted date qui gen daten = date(date,"YMD") format %td daten label variable date "fed string date" label variable daten "numeric (daily) date" qui compress file close `fh' end