根据其他变量替换变量中的值

Replace value in variable based on other variables

假设我有以下数据集,其中缺少 Country 的一些条目:

clear

input strL Person      strL Country     Population  
           'ABC'       "USA"              3999 
           'ABC'       " "                 544 
           'ABC'       " "                7546 
           'ABD'       "China"           10000 
           'BCG'       "India"            6789 
           'BCG'        " "               5454 
           'ABD'        " "              10000 
end

我希望用 Person 中的匹配值替换缺失的国家/地区。对于所有 Person 'ABC',国家应该是相同的。

我需要一个不同于手动编写脚本 replace Country = "USA" if Person == "ABC" 的解决方案,因为我的数据集对 Person.

有超过 10,000 个独特的观察结果

数据集应如下所示:

           Person      Country         Population  
           'ABC'       "USA"              2514 
           'ABC'       "USA"               388 
           'ABC'       "USA"              8245 
           'ABD'       "China"           10000 
           'BCG'       "India"            6789 
           'BCG'       "India"            5454 
           'ABD'       "China"           10000 

您的输入和输出不符合 Stata 标准。 Stata 不使用单引号作为字符串分隔符或在列表中显示字符串分隔符。

Stata 不会将一个或多个空格视为字符串缺失。

尽管如此,这可能有助于字符串变量,例如 Country:

clear

input strL Person      strL Country     Population  
           "ABC"       "USA"              3999 
           "ABC"       " "                 544 
           "ABC"       " "                7546 
           "ABD"       "China"           10000 
           "BCG"       "India"            6789 
           "BCG"        " "               5454 
           "ABD"        " "              10000 
end

bysort Person (Country) : replace Country = Country[_N] if missing(trim(Country)) 

list, sepby(Person)

     +-----------------------------+
     | Person   Country   Popula~n |
     |-----------------------------|
  1. |    ABC       USA       7546 |
  2. |    ABC       USA        544 |
  3. |    ABC       USA       3999 |
     |-----------------------------|
  4. |    ABD     China      10000 |
  5. |    ABD     China      10000 |
     |-----------------------------|
  6. |    BCG     India       5454 |
  7. |    BCG     India       6789 |
     +-----------------------------+