首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对中的每个变量使用if

如何对中的每个变量使用if
EN

Stack Overflow用户
提问于 2014-07-01 11:52:37
回答 2查看 1.1K关注 0票数 2

我有一个很大的数据集,其中每个观察都代表一个家庭;变量要么是家庭特征(地点、姓氏),要么是家庭成员的特征,例如age_member1, age_member2, edu_member1, edu_member2和更多的特征,对于50名成员。

我想用任何数字来找出移民和非移民之间的差异,例如教育水平是否不同(3 =大学)。这段代码显示了家里有多少人拥有大学学位:

代码语言:javascript
复制
egen uni_member = anycount (edu_member*), values(3)

现在我只想计算那些移民,也许有一个条件:

代码语言:javascript
复制
egen uni_migrant = anycount (edu_member*) if migr_member*=1, values(3)

但这是错误的,因为if必须引用单个变量.有什么帮助吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-01 13:43:03

按照罗伯托·费雷尔的回答,这似乎很容易就会变成一个循环:

代码语言:javascript
复制
gen uni_migrant = 0 
qui forval j = 1/50 { 
    replace uni_migrant = uni_migrant + (edu_member`j' == 3) * (migr_member`j' == 1) 
} 

请注意,这不应该是

代码语言:javascript
复制
gen uni_migrant = 0 
qui forval j = 1/50 { 
    replace uni_migrant = uni_migrant + (edu_member`j' == 3) if migr_member`j' == 1 
} 

如果uni_migrant值与if条件不匹配,则只需将其设置为“缺失”。

另一种选择是

代码语言:javascript
复制
gen uni_migrant = 0 
qui forval j = 1/50 { 
    replace uni_migrant = uni_migrant + cond(migr_member`j' == 1, (edu_member`j' == 3), 0)
} 
票数 1
EN

Stack Overflow用户

发布于 2014-07-01 13:28:17

我建议使用reshape将数据以long形式放置。逐行工作是可能的,但我通常觉得它更麻烦。例如:

代码语言:javascript
复制
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户人家有一名既移民又受过大学教育的成员。如果需要,可以将reshape返回到wide格式。见help reshape

如果你坚持逐行工作,你可以从尼克·考克斯的施塔塔:罗伊斯开始。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24509622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档