语法和程序错误无效

时间:2017-07-20 01:36:28

标签: stata

forvalue n=1/18 {
    if f_3_`n'_==1 {
        local i= `0'
        local y=`i'+1 
            gen ownagri_`y' = f123a_`y'_
            replace ownagri_`y' = . if f_2_sel_`n' ==1 
        local i = `i'+1
    }
    else if f_3_`n'_==2 {
        local i= `0'
        local y=`i'+1 
            gen agri_`y' = f126_a1_`n'_
            replace agri_`y' = .if f_2_sel_`n' ==1 
        local i = `i'+1
    }
    else if f_3_`n'_==3 {
        local i= `0'
        local y=`i'+1 
            gen nonagri_`y' = f126_a1_`n'_
            replace nonagri_`y' = . if f_2_sel_`n' ==1 
        local i = `i'+1
    }
    else if f_3_`n'_==4 {
        local i=`0'
        local y=`i'+1 {
            gen nonagriself_`y' = f128_`n'_
            replace nonagriself_`y' = . if f_2_sel_`n' ==1 
        local i = `i'+1
    }
    else if f_3_`n'_==5 {
        local i=`0'
        local y=`i'+1 
            gen military_`y' = . if f_2_sel_`n' ==1  
        local i = `i'+1
    }}
}

Stata说我的命令包含无效的语法,并且程序错误:代码跟在近大括号的同一行。

修改

forvalue n = 1/18 {
    if f_3_`n'_==1 {
        local y1 = 1 
        gen ownagri_`y1' = f123a_`y1'_ 
        replace ownagri_`y' = . if f_2_sel_`n'_ ==1 
        local y1 = `y1'+1
    }
    else if f_3_`n'_==2 {
        local y2 = 1 
        gen agri_`y2' = f126_a1_`y2'_ 
        replace agri_`y2' = . if f_2_sel_`n'_ ==1 
        local y2 = `y2'+1
    }
    else if f_3_`n'_==3 {
        local y3 = 1
        gen nonagri_`y3' = f126_a1_`y3'_ 
        replace nonagri_`y3' = . if f_2_sel_`n'_ ==1 
        local y3 = `y3'+1
    }
    else if f_3_`n'_==4 {
        local y4 = 1
        gen nonagriself_`y4' = f128_`y4'_ 
        replace nonagriself_`y4' = . if f_2_sel_`n'_ ==1 
        local y4 = `y4'+1
    }
    else if f_3_`n'_==6 {
        local y5 = 1
        gen military_`y5' = f129a_`y5'_
        replace military_`y5' = . if f_2_sel_`n'_ ==1 ,modify
        local y5 = `y5'+1
    }
}

我修改了代码并且程序似乎有效,但生成的结果似乎不完整。结果如下:

(20,070 missing values generated)
(2,194 real changes made, 2,194 to missing)
(19,229 missing values generated)
(1,129 real changes made, 1,129 to missing)

为什么?

1 个答案:

答案 0 :(得分:0)

已经提出具体意见:

一个。最后一行旁边的}}应为}(William Lisowski)

湾像

这样的行
if f_3_`n'_==1 

被评估为

if f_3_`n'_[1] ==1 

通常不是想要的。请参阅this FAQ了解更多信息。但这不是语法错误。

新的具体评论:

℃。这条线

local y=`i'+1 {

有一个应该删除的虚假{

一般评论:

一个。在没有上下文的情况下向我们投入大量代码是一种糟糕的问题风格。您对此不熟悉,这很好,但同样有一些建议供您遵循,例如: on good examples

B中。这里没有关于你要做什么的上下文,也没有数据示例。关于如何在its FAQ中呈现数据示例的Statalist建议通过简单的小修改(例如,关于分隔符[CODE]和{/ CODE]的建议在这里无关紧要)转移到其他站点。

℃。每个分支都有重复的代码可以移动,产生这个:

local i = `0'
local y = `i'+1 

forvalue n = 1/18 {
    if f_3_`n'_==1 {
        gen ownagri_`y' = f123a_`y'_
        replace ownagri_`y' = . if f_2_sel_`n' ==1 
    }
    else if f_3_`n'_==2 {
        gen agri_`y' = f126_a1_`n'_
        replace agri_`y' = .if f_2_sel_`n' ==1 
    }
    else if f_3_`n'_==3 {
        gen nonagri_`y' = f126_a1_`n'_
        replace nonagri_`y' = . if f_2_sel_`n' ==1 
    }
    else if f_3_`n'_==4 {
        gen nonagriself_`y' = f128_`n'_
        replace nonagriself_`y' = . if f_2_sel_`n' ==1 
    }
    else if f_3_`n'_==5 {
        gen military_`y' = . if f_2_sel_`n' ==1  
    }
}

local i = `i'+1

这段代码是否是您想要的,我们不能说,但它看起来合法,而且比原来的短。