Question

I want to save the results of my Stata forvalues loop into individual files. One component of the filename should be the value j assigned to the macro within a forvalues loop.

Apparently my code leads to an instruction always to save with 1995. As such, I get messages telling me that this file already exists.

I am using the following code:

local j = 1995

forvalues `j'= 1995 / 2012 {  
    clear  
    use "/Users/carl/Desktop/STATA/Neustart/eventdates.dta", clear  
    keep if eventyear == `j'  
    sort acq_cusip eventdate  
    compress  
    save "/Users/carl/Desktop/STATA/Neustart/eventdates_`j'.dta"  
}

Does anyone have an answer to that?

Was it helpful?

Solution

In your original code Stata sees `j' inside the forvalues command (instead of the correct j), so it starts to evaluate that before it starts the loop. So what is eventually run is

forvalues 1995=1995/2012 {

This means that forvalues is changing the content of the local macro confusingly but legally called `1995' to 1995 in the first iteration, 1996 in the second iteration, etc. So when you refer to the local `j' inside the loop, it will not have changed and remains at the original value which you defined before the loop.

The way to solve this is to replace:

local j = 1995
forvalues `j' = 1995/2012 {

with:

forvalues j = 1995/2012 {

OTHER TIPS

use replace

save "/Users/carl/Desktop/STATA/Neustart/eventdates_`j'.dta",replace

Updated

cd  "C:\Users\Vista\Desktop\Stataproject"


 forvalues j=1/5 {  
 sysuse auto,clear
      keep if rep78== `j'   
       save "auto_`j'.dta",replace
   }

Example with auto data in Stata . For details please see, Speaking Stata: How to face lists with fortitude

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top