Stata Code

File loops

* fancy ways to get files from directories

set more off

cd "C:\My Documents\Stata\test data"

// File paths etc

// Pre-creating them eliminates the compound quotes problem in specifying files

global in_dir "C:\My Documents\Stata\test data\"

global out_dir "C:\My Documents\Stata\test output\"

global in_suffix ".csv"

global out_suffix ".dta"

/***** METHOD 1 ******/

// this method requires file names without whitespace

// note: you can always replace c(pwd) with a path

// specific command - specify file type after "*"

local files : dir "`c(pwd)'" files "*.txt";

// general command for file type

local files : dir "`c(pwd)'" files "*$in_suffix"

foreach file in `files' {

di "`file'"

insheet using `file', comma clear

// saving like this means the saved file will be filename.in_suffix.dta

// fix described below

save "`f'$out_suffix", replace


/******* METHOD 2 ******/

// this method *should be* fully flexible regarding file names

/* The command "fs *" gets the list of files in the directory (requires fs be installed) and returns it to r()

Limitation: it gets all the files - if you want to limit it to files with a certain suffix, you will have to do

some string operations on each file name


qui fs *

// r(files) holds the list of file names

foreach f in `r(files)' {

// get the filename

local file_name = "`f'"

// get length of the filename

local name_len = length("`file_name'")

// create the output file name

// eliminates the last 4 characters of the filename - "." and the file type

/* note: a more flexible version would have a local for the length of the expected

suffix, but I was too lazy


local out_file = substr("`file_name'",1,(`name_len'-4)) //gets rid of original file suffix

// get the infile

insheet using "`f'", comma clear

// do manipulations here...

/* Changes the directory to the output directory. This is just to make sure if the

do file gets run multiple times we aren't also reading in the output files


cd "$out_dir"

// doing it like this means the saved file will be filename.in_suffix.dta

save "`f'$out_suffix", replace

// doing it like this eliminates the infile suffix

save "`out_file'$out_suffix", replace

// go back to the infile directory to grab the next file

cd "$in_dir"