根据横截面数据的另一个变量为整个家庭生成变量

时间:2017-02-28 13:55:50

标签: variables stata

我有一个关于不同家庭的数据集。每个家庭都有不同的个人。我想为特定变量选择一个条目(个人)并将其应用于整个家庭。最后,我想对家庭数据进行回归并忽略个人。例如:

家庭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也没有帮助。

1 个答案:

答案 0 :(得分:0)

显示的代码非常混乱。

循环中从不引用的单个实体的循环是合法的,但只是等同于内部的语句,执行一次。

请注意,您从未在循环中引用本地宏hi

因此,您的代码等同于

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(这里确定了标准)。