Hi all,
I’m experiencing the following error when trying to import a dataset from Stata:
UndefVarError: libreadstat not defined
My code is the following:
using Pkg, DataFrames, ReadStat
Pkg.add("CSV")
Pkg.add("ReadStat")
Pkg.add("DataFrames")
data = read_dta("/path/to/data/data.dta");
Apparently, the problem comes from the definition of the function Parser
:
function read_data_file(filename::AbstractString, filetype::Val)
# initialize ds
ds = ReadStatDataFrame()
# initialize parser
parser = Parser()
# parse
parse_data_file!(ds, parser, filename, filetype)
# return dataframe instead of ReadStatDataFrame
return ds
end
function Parser()
parser = ccall((:readstat_parser_init, libreadstat), Ptr{Nothing}, ())
info_fxn = @cfunction(handle_info!, Cint, (Cint, Cint, Ptr{ReadStatDataFrame}))
meta_fxn = @cfunction(handle_metadata!, Cint, (Ptr{Nothing}, Ptr{ReadStatDataFrame}))
var_fxn = @cfunction(handle_variable!, Cint, (Cint, Ptr{Nothing}, Cstring, Ptr{ReadStatDataFrame}))
val_fxn = @cfunction(handle_value!, Cint, (Cint, Ptr{Nothing}, ReadStatValue, Ptr{ReadStatDataFrame}))
label_fxn = @cfunction(handle_value_label!, Cint, (Cstring, Value, Cstring, Ptr{ReadStatDataFrame}))
ccall((:readstat_set_metadata_handler, libreadstat), Int, (Ptr{Nothing}, Ptr{Nothing}), parser, meta_fxn)
ccall((:readstat_set_variable_handler, libreadstat), Int, (Ptr{Nothing}, Ptr{Nothing}), parser, var_fxn)
ccall((:readstat_set_value_handler, libreadstat), Int, (Ptr{Nothing}, Ptr{Nothing}), parser, val_fxn)
ccall((:readstat_set_value_label_handler, libreadstat), Int, (Ptr{Nothing}, Ptr{Nothing}), parser, label_fxn)
return parser
end
I already tried saving the Stata file into an older version (e.g., version 12 or 13) and importing it again.
Any help on this would be much appreciated!