You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Stata中如何从多个国家名称变量生成对应国家0-1标识变量

原代码错误原因

你的代码从逻辑到语法都存在问题,根本无法实现需求:

  • 核心逻辑偏差:Stata宏列表操作符&是求多个集合的交集,只会返回同时存在于s1到s20所有变量里的内容,和你需要的「只要国家出现在任意一个country变量中就标记为1」的需求完全相反
  • 语法错误:直接写local s1 = Countryies1 [i']的取值方式不符合Stata语法,且你代码里变量名混用了country1和Countryies1`,拼写不一致会直接触发变量不存在报错
  • 效率极低:逐行遍历观测、逐个定义20个局部宏的写法冗余度极高,数据量稍大时运行速度极慢。
正确实现方案

不需要写冗余的逐行取值逻辑,两步就能完成所有国家标识变量的生成,以下是可直接运行的代码:

* 1. 先提取country1-country20里所有出现过的不重复国家名称
preserve
stack country1-country20, into(country_name) clear
drop if missing(country_name) // 剔除拆分产生的空值
levelsof country_name, local(country_list) clean
restore

* 2. 循环为每个国家生成0-1标识变量
foreach c of local country_list {
    * 把国家名中的空格替换为下划线,避免生成非法变量名
    local varname = subinstr("`c'", " ", "_", .)
    gen byte `varname' = 0
    * 只要国家出现在任意一个country1-country20变量中,就赋值为1
    forvalues j = 1/20 {
        replace `varname' = 1 if country`j' == "`c'"
    }
}

如果国家名称中包含斜杠、逗号等其他特殊字符,在生成varname的步骤里多加几行subinstr()替换即可,保证变量名符合Stata命名规则。
运行完成后,数据集中会新增所有出现过的国家对应的变量:观测包含对应国家则值为1,不包含则值为0,完全匹配你的需求。

内容的提问来源于stack exchange,提问作者Shri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 10:15:56