Software

Open-source R and Stata tools for survey and microdata work

I write these tools for problems that keep coming up in survey work: getting data out of SurveyCTO, handling dates recorded in the Ethiopian calendar, and finding microdata in public catalogs. Three are R packages on CRAN and two are Stata modules on SSC. The R packages are MIT-licensed and the source code is on GitHub.

ctoclient

A data pipeline for SurveyCTO in R and Stata

R · CRANStata · SSCSince 2026
CRAN version of ctoclientTotal CRAN downloads of ctoclient

An R client for the SurveyCTO REST API, built on httr2. It downloads form submissions and tidies them: fields get their proper types, geopoints are split and select_multiple columns are filled in. It also handles encrypted forms, attachments and server datasets, and writes Stata labelling do-files. The Stata module uses the same command names.

cto_connect()cto_form_data()cto_form_data_attachment()cto_form_dofile()
Install R
install.packages("ctoclient")
Stata
ssc install ctoclient

ethiodate

Ethiopian dates in R and Stata

R · CRANStata · SSCSince 2025
CRAN version of ethiodateTotal CRAN downloads of ethiodate

Ethiopian dates that behave like base R Date objects. The package converts between the Ethiopian and Gregorian calendars, parses dates written in common formats, checks leap years and the thirteenth month (Pagume), and works with dplyr, ggplot2 and lubridate. The core is written in C++ with Rcpp. The Stata module does the same conversions.

eth_date()eth_parse_date()eth_weekday()scale_x_ethdate()
Install R
install.packages("ethiodate")
Stata
ssc install ethiodate

nadaverse

Search the world's microdata catalogs from R

R · CRANSince 2025
CRAN version of nadaverseTotal CRAN downloads of nadaverse

Searches microdata catalogs that run on NADA, including those of the World Bank, IHSN, FAO, UNHCR and ILO, and returns study metadata, file lists and data dictionaries as data frames. Built on httr2.

catalogs()search_catalog()data_files()data_dictionary()
Install R
install.packages("nadaverse")
No matching items

Found a bug or want a feature? Open an issue on the package’s GitHub page.

Back to top