*! 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 a line
file read `fh' line
local line = trim(`"`line'"')
* if it matches tr, parse it
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 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