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

Stata中如何保留仅属于指定列表的州数据?

Stata保留指定州微观数据的正确实现方法

我在处理微观数据集时遇到了问题:每个州不同年份对应不同个体数据,想保留部分州的数据,但各州个体数量不同,keep if _n <= _N/2没法用。于是先做了州唯一值的数据集,筛选出要保留的州后存到列表里,再导入原始数据想保留列表内的州,但尝试的命令都失败了,原代码如下:

sort my_list
egen random = mean(runiform()), by(my_list)
sort random my_list
keep if _n <= _N/2

levelsof mylist, local(list)
local req_list ""
foreach value of local list{
    localreq_list `"`req_list' `value'"'
}

drop random my_list

use "path\to\mydta.dta"

keep if inlist(STATEFIP, `req_list') *this kept deleting the entire dataset
keep if inlist(levelsof STATEFIP, `req_list') *levelsof not found

原代码里的问题

  1. 变量名写错了:前面分组用的是my_list,但levelsof命令里写成了mylist(少了下划线),Stata找不到这个变量,根本提不出州的唯一值。
  2. 局部变量赋值错了:localreq_list "req_list' value'"'这里少了空格,应该是local req_list "req_list' value'"',不然req_list这个变量根本没被正确赋值,是空的。
  3. inlist用法不对:
    • levelsof是Stata的命令,不是函数,不能直接塞到inlist里,这肯定会报错。
    • 就算req_list正确生成了,如果STATEFIP是字符串类型,inlist里的每个值还需要加引号,不然匹配不上。

正确的两种实现方法

方法一:修正局部变量逻辑,用inlist匹配

// 处理州唯一值数据集,筛选出要保留的州
sort my_list
egen random = mean(runiform()), by(my_list)
sort random my_list
keep if _n <= _N/2

// 正确提取州的唯一值到局部变量,注意变量名要和数据集里的一致
levelsof my_list, local(state_list)

// 关闭当前数据集,打开原始数据
use "path\to\mydta.dta", clear

// 根据STATEFIP的类型选命令:
// 如果是数值型州编码:
keep if inlist(STATEFIP, `state_list')

// 如果是字符串型州编码(要给每个值加双引号):
// keep if inlist(STATEFIP, `"`state_list'"')

方法二:用merge替代inlist(州数量多的时候更稳妥)

如果要保留的州数量很多,inlist可能会因为参数太长报错,用merge更可靠:

// 处理州唯一值数据集,只保留需要的州
sort my_list
egen random = mean(runiform()), by(my_list)
sort random my_list
keep if _n <= _N/2
// 只保留州编号列,重命名成和原始数据一致的列名
keep my_list
rename my_list STATEFIP
duplicates drop STATEFIP, force
save "path\to\selected_states.dta", replace

// 打开原始数据集,匹配目标州
use "path\to\mydta.dta", clear
merge m:1 STATEFIP using "path\to\selected_states.dta"
// 只保留匹配成功的观测(也就是属于目标州的数据)
keep if _merge == 3
drop _merge

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 02:30:37