If statement 如何对egen anycount中的每个变量使用if
我有一个大的数据集,每个观察代表一个家庭;变量为住户特征(位置、姓氏)或住户成员特征,例如50名成员的If statement 如何对egen anycount中的每个变量使用if,if-statement,stata,If Statement,Stata,我有一个大的数据集,每个观察代表一个家庭;变量为住户特征(位置、姓氏)或住户成员特征,例如50名成员的年龄成员1、年龄成员2、教育成员1、教育成员2等 我想使用任何计数来找出移民和非移民之间的差异,例如教育水平是否不同(3=大学)。此代码用于确定家庭中有多少人拥有大学学位: egen uni_member = anycount (edu_member*), values(3) 现在我只想统计那些移民,可能有if条件: egen uni_migrant = anycount (edu_membe
年龄成员1、年龄成员2、教育成员1、教育成员2等
我想使用任何计数来找出移民和非移民之间的差异,例如教育水平是否不同(3=大学)。此代码用于确定家庭中有多少人拥有大学学位:
egen uni_member = anycount (edu_member*), values(3)
现在我只想统计那些移民,可能有if条件:
egen uni_migrant = anycount (edu_member*) if migr_member*=1, values(3)
但这是错误的,因为if必须引用单个变量。。。有什么帮助吗?我建议使用重塑
将数据放入长格式。按顺序工作是可能的,但我通常觉得更麻烦。例如:
clear all
set more off
*----- example data -----
input ///
hh uni1 age1 migr1 uni2 age2 migr2 uni3 age3 migr3
1 1 23 0 0 54 1 0 38 1
2 0 16 0 1 48 1 0 40 0
end
list
*----- what you want -----
reshape long uni age migr, i(hh) j(member)
bysort hh: egen counthh = total(uni == 1 & migr == 1)
list, sepby(hh)
这使得1号家庭有一名成员同时是移民并受过大学教育。如果需要,您可以将重塑
为宽
格式。请参见帮助重塑
如果你坚持按顺序工作,你可以从Nick Cox的文章开始。下面是Roberto Ferrer的答案,这似乎很容易让人陷入循环:
gen uni_migrant = 0
qui forval j = 1/50 {
replace uni_migrant = uni_migrant + (edu_member`j' == 3) * (migr_member`j' == 1)
}
请注意,这不应被忽略
gen uni_migrant = 0
qui forval j = 1/50 {
replace uni_migrant = uni_migrant + (edu_member`j' == 3) if migr_member`j' == 1
}
对于与if
条件不匹配的观察值,将仅将uni_
的值设置为缺失
另一种选择是
gen uni_migrant = 0
qui forval j = 1/50 {
replace uni_migrant = uni_migrant + cond(migr_member`j' == 1, (edu_member`j' == 3), 0)
}
最后我使用了上一个版本,只是做了一个小小的改动:替换uni_migram=uni_migram+cond(migr_memberj'==1,1,0)*cond(edu member
j'==3,1,0)@Nick,如果不是cond(migr_member'j'==1,(edu member'j'==3),0)
,第三个选项?@Roberto ferer很好。