*capture program drop mergegz *! version 0.3.0 25sep2019 program define mergegz version 11 // check for 7-Zip capture macro list gziputil_path_7z if _rc != 0 { check7z if !r(sevenz_available) { display as error "7-Zip was not found in within PATH!" display as error "Please check if it is installed and add the respective path to the PATH environment variable." exit } } syntax anything(everything) [, keepusing(varlist) generate(name) /// Nogenerate Nolabel Nonotes update replace /// Noreport force] local anything = subinstr(`""`anything'""', `"""', "", .) if (!ustrregexm("`anything'", "^(1|m)")) { display as error "mergegz only accepts the new merge syntax as of version 11; see {help merge} for new syntax" exit 197 } if (!ustrregexm("`anything'", "using")) { display as error "using required" exit 100 } quietly display ustrregexm("`anything'", "^(1|m):(1|m)") local mergetype = ustrregexs(0) quietly display ustrregexm("`anything'", "(?<=(1 |m )).+(?=using)") local mergevars = ustrregexs(0) quietly display ustrregexm("`anything'", "(?<=using ).+") local mergefile = ustrregexs(0) // without file extension --> add dta.gz if (!regexm("`mergefile'", "\.[a-zA-z]+$")) { local dta_gz_file = "`mergefile'.dta.gz" } // with allowed (dta.gz) file extension else if (regexm("`mergefile'", "\.dta.gz$")) { local dta_gz_file = "`mergefile'" } // with file extension other than dta.gz --> error else { display as error "The provided file is not a gzipped Stata (.dta.gz) file: `mergefile'" exit 603 } tempfile temp_dta if c(os) == "Windows" { local orig_shell = "${S_SHELL}" global S_SHELL "powershell.exe -WindowStyle Hidden" shell ${gziputil_path_7z} e '`dta_gz_file'' -o'`temp_dta'' global S_SHELL "`orig_shell'" } else { shell 7z e '`dta_gz_file'' -o'`temp_dta'' } *shell 7z e "`dta_gz_file'" -so > `temp_dta' local bare_name = ustrregexra("`dta_gz_file'", "(^.+\\|\.gz$)", "") merge `mergetype' `mergevars' using "`temp_dta'\\`bare_name'", /// keepusing(`keepusing') generate(`generate') `nogenerate' `nolabel' /// `nonotes' `update' `replace' `noreport' `force' capture rm "`temp_dta'\\`bare_name'" capture rm "`temp_dta'\\`bare_name'.dta" rmdir `temp_dta' end