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]
。您的示例很简单——除了作为空格的字符串不会被视为缺失的严肃细节之外——因为每组观察值中只有一个非缺失值,所以问题只是复制它以覆盖缺失的机制。在大型数据集中,可能需要检查一致性。