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)
为什么?
答案 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
这段代码是否是您想要的,我们不能说,但它看起来合法,而且比原来的短。