Stata 基于其他变量替换变量中的值

Stata 基于其他变量替换变量中的值,stata,Stata,假设我有以下数据集,其中有一些Country缺少的条目: clear input strL Person strL Country Population 'ABC' "USA" 3999 'ABC' " " 544 'ABC' " "

假设我有以下数据集,其中有一些
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
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 |
     +-----------------------------+
我希望用
Person
中的匹配值替换缺少的国家/地区。对于所有
“ABC”,国家应相同

我需要一个不同于手动编写脚本的解决方案,如果Person==“ABC”,则替换Country=“USA”,因为我的数据集对
Person
有超过10000个独特的观察结果

数据集应如下所示:

           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
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 |
     +-----------------------------+

您的输入和输出与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
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 |
     +-----------------------------+

这有帮助。如果我试图插补的缺失变量是一个浮点数,这种情况会发生什么变化?缺失的数值排序到最后,这样您就可以引用numericvar
[1]
而不是strvar
[\N]
。您的示例很简单——除了作为空格的字符串不会被视为缺失的严肃细节之外——因为每组观察值中只有一个非缺失值,所以问题只是复制它以覆盖缺失的机制。这可能是因为在一个大型数据集中,您需要检查一致性。这很有帮助。如果我试图插补的缺失变量是一个浮点数,这种情况会发生什么变化?缺失的数值排序到最后,这样您就可以引用numericvar
[1]
而不是strvar
[\N]
。您的示例很简单——除了作为空格的字符串不会被视为缺失的严肃细节之外——因为每组观察值中只有一个非缺失值,所以问题只是复制它以覆盖缺失的机制。在大型数据集中,可能需要检查一致性。