【发布时间】:2014-02-20 10:52:54
【问题描述】:
我一直在寻找这个特定问题的答案,但找不到任何答案。我有两组变量将数据集中的人分别与他们的母亲和父亲联系起来。我的目标是将人们与他们的兄弟姐妹联系起来。我的数据集如下所示:
person_id mom_id father id child_1_mom child_2_mom child_1_dad child_2_dad
我只对保留具有相同父亲和母亲的孩子感兴趣,这意味着如果 child_*_mom 个人 ID 之一与 @ 987654323@ 身份证。我一直在尝试不同的东西,但我最好的猜测是类似这段代码,只是为了说明我在做什么。
forvalues i=1(1)17 {;
replace child_`i'_mom="" if
(forvalues j=1(1)17 {;
(child_`i'_mom!=child_`j'_dad) &
};
(child_`i'_mom!=child_18_dad));
};
如您所见,这有点创意,但我想出了最好的。我有 17 个母亲的孩子变量和 18 个父亲的孩子变量(我的数据集中有些有 18 个孩子)。我不想手动执行此操作的原因是我总共要执行上述操作 20 年,并且我计划稍后为妈妈和爸爸宏化子变量的数量。
然后我的问题是:有没有办法在循环中的if 语句中执行forvalues 循环?或者有没有更聪明的方法来解决这个问题?
进一步解释:
好的,所以我将尝试进一步详细说明这个问题。
原来数据集是这样的
person_id mother_id father_id
然后我对数据进行了排序,首先根据mother_id,并创建了一个变量,使得数据看起来像这样
person_id mother_id mother_n
11 1 1
12 1 2
13 2 1
14 2 2
15 2 3
等等。这已经为母亲和父亲做了。然后我重塑两个数据集,这样
mother_id child_1 child_2 child_3
1 11 12 .
2 13 14 15
从这个结果数据集(对于父亲和母亲),我将这些数据集合并到原始数据集中,这样
person_id mother_id mother_n child_1_m child_2_m child_3_m child_1_f child_2_f
11 1 1 11 12 . ? ?
12 1 2 11 12 . ? ?
13 2 1 13 14 15 ? ?
14 2 2 13 14 15 ? ?
15 2 3 13 14 15 ? ?
因此,我对母亲的孩子和父亲的孩子都有变量。接下来我想让每个变量观察都丢失,其中child_ID 不在child_*_m 变量组和child_*_f 变量组中。
所以我的想法是我想制作一个自动化程序,在一个循环中执行此操作,而无需在整个程序中手动多次“替换 if ...”,因为我必须这样做多年,具有不同的最大子节点数。
希望这可以澄清。
【问题讨论】:
-
for* 在if限定符内循环:无法完成。我不知道为什么这些数据采用这种形式。我可以想象人员标识符、母亲标识符、父亲标识符,并且可以看到父标识符可能丢失。为什么会有这么多变量? -
这来自丹麦的数据,包括该国在给定年份的每个人。最初,原始数据包括丹麦的每个人,并带有他们母亲和父亲的标识符。我们需要将人们的教育水平与他们的兄弟姐妹(父母相同)进行比较。所以我正在制作一个数据集,通过他们的父母标识符将给定人(母亲或父亲)的每个孩子与丹麦的每个人合并,所以是的。目前看起来有点奇怪,但我只是在制作数据 - 而不是分析它,呵呵。
标签: loops if-statement stata