我有一个关于不同家庭的数据集。每个家庭都有不同的个人。我想为特定变量选择一个条目(个人)并将其应用于整个家庭。最后,我想对家庭数据进行回归并忽略个人。例如:
家庭ID |个人身份|变量1
H1 | A1 | a
H1 | A2 |
H1 | A3 |一个
H1 | A4 |一个
H2 | A1 |乙
H2 | A2 |
H3 | A1 |乙
H3 | A2 |一个
H3 | A3 |
H3 | A4 |一个
H3 | A5 |
H3 | A6 |
我想创建一个数据:
家庭ID变量1
H1 |一个
H2 |乙
H3 |乙
[编辑:有可能通过egen做到这一点。我试图通过嵌套循环来接近它。
> foreach h in household_id{
> local d = 0
> local e = 0
> foreach i in individual_id{
> replace `d' = 1 if var1 == 1
> replace `e' = 2 if var1 == 2
> }
> foreach i in individual_id{
> replace a = 1 if `d' == 1
> replace a = 2 if `e' == 2
> }
> }
这是另一个我将直接用来替换var1的变量。代码给出了错误:
0 invalid name
我的代码需要哪些更正?我使用本地宏有根本缺陷吗?使用tempvar也没有帮助。
答案 0 :(得分:0)
显示的代码非常混乱。
循环中从不引用的单个实体的循环是合法的,但只是等同于内部的语句,执行一次。
请注意,您从未在循环中引用本地宏h
或i
。
因此,您的代码等同于
local d = 0
local e = 0
replace `d' = 1 if var1 == 1
replace `e' = 2 if var1 == 2
replace a = 1 if `d' == 1
replace a = 2 if `e' == 2
当本地宏d
首次被其内容替换时会失败,从而导致
replace 0 = 1 if var1 == 1
并且错误消息正确,因为0
不是有效的变量名称。下一个陈述会引发同样的问题。
Stata从未尝试过测试
... if 0 == 1
... if 0 == 2
这些陈述虽然合法,但却无济于事,因为条件永远不会得到满足。
到目前为止,如此负面。我不能积极地建议代码,因为我不明白你想做什么。您发布的内容看起来不像真实或真实的数据。我建议您查看http://www.statalist.org/forums/help#stata,其中建议如何发布Stata数据示例(这里也是相关的)以及https://stackoverflow.com/help/mcve(这里确定了标准)。