Bookmark and Share

Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

st: __000001 not found error in macro loop


From   Fiona Feng <fsfeng@unimelb.edu.au>
To   statalist@hsphsun2.harvard.edu
Subject   st: __000001 not found error in macro loop
Date   Fri, 22 Jul 2011 18:15:07 +1000

Hi all,

I've got a pretty strange problem. I want to run some existing code by
region and by state, so I just added a line of code at the beginning
to run the program by region or by state. The problem is that while
the code by region works fine, the code for state gives a "__000001
not found" error. The code for region is:

**2. match_flows
forvalues y=1/4 {
local x=197601

while `x' <= 201012 {

    quietly {
        if `x' != 197601 & `x' != 197801 & `x' != 198507 & `x' !=
198510 & `x' != 199401 & `x' != 199506 & `x' != 199507 & `x' != 199508
& `x' != 199509 {
                use merg`x', clear
                save "merg`x'-`y'.dta", replace
                keep if reg==`y'
                keep if age >= 16
                *drop if mis0 == 1
                gen str1 lfs0 = "E" if status0 == 1 | status0 == 2
                replace lfs0 = "U" if status0 == 3
                replace lfs0 = "I" if status0 == 4 | status0 == 5 |
status0 == 6 | status0 == 7
                replace lfs0 = "U" if status0 == 4 & `x' > 198901
                replace lfs0 = "M" if lfs0 == ""
                gen str1 lfs1 = "E" if status1 == 1 | status1 == 2
                replace lfs1 = "U" if status1 == 3
                replace lfs1 = "I" if status1 == 4 | status1 == 5 |
status1 == 6 | status1 == 7
                replace lfs1 = "U" if status1 == 4 & `x' > 198900
                replace lfs1 = "M" if lfs1 == ""

                gen str2 lfs2 = lfs0 + lfs1

                sort lfs2
                replace fweight0 = 0 if fweight0 == .
                replace fweight1 = 0 if fweight1 == .
                gen weight = (fweight0+fweight1)/2
                egen double flows = sum(weight), by(lfs2)
                replace flows = flows/1000
                if `x' > 199400 {replace flows = flows/100}

                sort lfs2
                quietly by lfs2:  gen duplic = cond(_N==1,0,_n)
                drop if duplic > 1

                keep lfs2 flows reg
                gen date = `x'
                reshape wide flows, i(date) j(lfs2) string

                gen flowEE = flowsEE/(flowsEE+flowsEI+flowsEU+flowsEM)
                gen flowEI = flowsEI/(flowsEE+flowsEI+flowsEU+flowsEM)
                gen flowEU = flowsEU/(flowsEE+flowsEI+flowsEU+flowsEM)
                gen flowEM = flowsEM/(flowsEE+flowsEI+flowsEU+flowsEM)
                gen flowUE = flowsUE/(flowsUE+flowsUI+flowsUU+flowsUM)
                gen flowUI = flowsUI/(flowsUE+flowsUI+flowsUU+flowsUM)
                gen flowUU = flowsUU/(flowsUE+flowsUI+flowsUU+flowsUM)
                gen flowUM = flowsUM/(flowsUE+flowsUI+flowsUU+flowsUM)
                gen flowIE = flowsIE/(flowsIE+flowsII+flowsIU+flowsIM)
                gen flowII = flowsII/(flowsIE+flowsII+flowsIU+flowsIM)
                gen flowIU = flowsIU/(flowsIE+flowsII+flowsIU+flowsIM)
                gen flowIM = flowsIM/(flowsIE+flowsII+flowsIU+flowsIM)
                gen flowME = flowsME/(flowsME+flowsMI+flowsMU)
                gen flowMI = flowsMI/(flowsME+flowsMI+flowsMU)
                gen flowMU = flowsMU/(flowsME+flowsMI+flowsMU)
                drop flows*
            }


            else {
            clear
            set obs 1
            gen date = `x'
            gen flowEE = .
            gen flowEI = .
            gen flowEU = .
            gen flowEM = .
            gen flowUE = .
            gen flowUU = .
            gen flowUI = .
            gen flowUM = .
            gen flowIE = .
            gen flowIU = .
            gen flowII = .
            gen flowIM = .
            gen flowME = .
            gen flowMU = .
            gen flowMI = .
            }

            if `x' >= 197602 {
                append using flows`y'
            }

            save "flows`y'.dta", replace
    }


    local x = `x' + 1
    if (`x'-13)/100 == int((`x'-13)/100) {
        local x = `x' + 88
        noisily display (`x'-1)/100}
            }

        sort date

        gen flowMM = 0

        save "flows`y'.dta", replace


}

While the code for state is:
**2. match_flows
foreach y in 11 12 13 14 15 16 21 22 23 31 32 33 34 35 41 42 43 44 45
46 47 51 52 53 54 55 56 57 58 59 61 62 63 64 71 72 73 74 81 82 83 84
85 86 87 88 91 92 93 94 95 {
local x=197601
while `x' <= 201012 {
            quietly {
            if `x' != 197601 & `x' != 197801 & `x' != 198507 & `x' !=
198510 & `x' != 199401 & `x' != 199506 & `x' != 199507 & `x' != 199508
& `x' != 199509 {
                    use merg`x', clear
                    save "merg`x'-`y'.dta", replace
                    keep if state==`y'
                    keep if age >= 16
                    *drop if mis0 == 1
                    gen str1 lfs0 = "E" if status0 == 1 | status0 == 2
                    replace lfs0 = "U" if status0 == 3
                    replace lfs0 = "I" if status0 == 4 | status0 == 5
| status0 == 6 | status0 == 7
                    replace lfs0 = "U" if status0 == 4 & `x' > 198901
                    replace lfs0 = "M" if lfs0 == ""
                    gen str1 lfs1 = "E" if status1 == 1 | status1 == 2
                    replace lfs1 = "U" if status1 == 3
                    replace lfs1 = "I" if status1 == 4 | status1 == 5
| status1 == 6 | status1 == 7
                    replace lfs1 = "U" if status1 == 4 & `x' > 198900
                    replace lfs1 = "M" if lfs1 == ""

                    gen str2 lfs2 = lfs0 + lfs1

                    sort lfs2
                    replace fweight0 = 0 if fweight0 == .
                    replace fweight1 = 0 if fweight1 == .
                    gen weight = (fweight0+fweight1)/2
                    egen double flows = sum(weight), by(lfs2)
                    replace flows = flows/1000
                    if `x' > 199400 {replace flows = flows/100}

                    sort lfs2
                    quietly by lfs2:  gen duplic = cond(_N==1,0,_n)
                    drop if duplic > 1

                    keep lfs2 flows state
                    gen date = `x'
                    reshape wide flows, i(date) j(lfs2) string

                    gen flowEE = flowsEE/(flowsEE+flowsEI+flowsEU+flowsEM)
                    gen flowEI = flowsEI/(flowsEE+flowsEI+flowsEU+flowsEM)
                    gen flowEU = flowsEU/(flowsEE+flowsEI+flowsEU+flowsEM)
                    gen flowEM = flowsEM/(flowsEE+flowsEI+flowsEU+flowsEM)
                    gen flowUE = flowsUE/(flowsUE+flowsUI+flowsUU+flowsUM)
                    gen flowUI = flowsUI/(flowsUE+flowsUI+flowsUU+flowsUM)
                    gen flowUU = flowsUU/(flowsUE+flowsUI+flowsUU+flowsUM)
                    gen flowUM = flowsUM/(flowsUE+flowsUI+flowsUU+flowsUM)
                    gen flowIE = flowsIE/(flowsIE+flowsII+flowsIU+flowsIM)
                    gen flowII = flowsII/(flowsIE+flowsII+flowsIU+flowsIM)
                    gen flowIU = flowsIU/(flowsIE+flowsII+flowsIU+flowsIM)
                    gen flowIM = flowsIM/(flowsIE+flowsII+flowsIU+flowsIM)
                    gen flowME = flowsME/(flowsME+flowsMI+flowsMU)
                    gen flowMI = flowsMI/(flowsME+flowsMI+flowsMU)
                    gen flowMU = flowsMU/(flowsME+flowsMI+flowsMU)
                    drop flows*
                }


                else {
                clear
                set obs 1
                gen date = `x'
                gen flowEE = .
                gen flowEI = .
                gen flowEU = .
                gen flowEM = .
                gen flowUE = .
                gen flowUU = .
                gen flowUI = .
                gen flowUM = .
                gen flowIE = .
                gen flowIU = .
                gen flowII = .
                gen flowIM = .
                gen flowME = .
                gen flowMU = .
                gen flowMI = .
                }

                if `x' >= 197602 {
                append using flows`y'
                }

                save "flows`y'.dta", replace
        }


        local x = `x' + 1
        if (`x'-13)/100 == int((`x'-13)/100) {
            local x = `x' + 88
            noisily display (`x'-1)/100
            }
                }

    sort date

    gen flowMM = 0

    save "flows`y'.dta", replace


}

Considering that I've made very minor changes to the code, I don't see
what the problem is. Using the trace command, I've managed to deduce
that it's something to do with the egen code:

egen double flows = sum(weight), by(lfs2)

That causes the "__000001 not found" error.

Please help!

Many thanks,

Fiona Feng.
*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/


© Copyright 1996–2018 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   Site index