用面板数据中每个 id 的参考值替换缺失值

Replace missing values by a reference value for each id in panel data

我有面板数据:

    Id |       Wave| Localisation| Baseline
     1 |         1 |          AA |        1
     1 |         2 |          .  |        0
     1 |         3 |          .  |        0
     2 |         2 |          AB |        1
     2 |         3 |          .  |        0
     3 |         1 |          AB |        1
     3 |         3 |           . |        0
     4 |         2 |          AC |        1
     4 |         3 |           . |        0

一个面板的一些变量值(hhsizelocalisation,随便什么)作为参考(这些值仅包含在基线访谈中)。

因此,对于每个 id,我们都没有所有信息。例如,对于 id==1,我们在非基线访谈 (baseline==0) 的 Localisation 列中缺少值。

我想将基线值分布到每个面板。也就是说,我想用每个 id.

的基线访谈中给出的 Localisation 替换 Localisation 列中的缺失值 .

事实上,信息Localisation在不同的波浪中保持不变。因此,了解一个人每一波的定位是很有用的。

如果您提供的数据模式对于整个数据集都是相同的,那么以下应该有效:

clear

input Id Wave str2 Localisation Baseline
1 1 AA 1
1 2  . 0
1 3  . 0
2 2 AB 1
2 3  . 0
3 1 AB 1
3 3  . 0
4 2 AC 1
4 3  . 0
end

bysort Id (Wave): replace Localisation = Localisation[1] if Localisation == "."

list, sepby(Id) abbreviate(15)

     +-------------------------------------+
     | Id   Wave   Localisation   Baseline |
     |-------------------------------------|
  1. |  1      1             AA          1 |
  2. |  1      2             AA          0 |
  3. |  1      3             AA          0 |
     |-------------------------------------|
  4. |  2      2             AB          1 |
  5. |  2      3             AB          0 |
     |-------------------------------------|
  6. |  3      1             AB          1 |
  7. |  3      3             AB          0 |
     |-------------------------------------|
  8. |  4      2             AC          1 |
  9. |  4      3             AC          0 |
     +-------------------------------------+