stata - 有没有办法让数据集中的观察结果以它们在某个列表中为条件?
问题描述
我有一个包含数百万个观察值的 dta 文件,其中包含大约 4 个变量。我只想查看这些数据的一个子集,其中的变量username
包含在几百个用户名的列表中。我有两个 .dta 文件。一个有完整的数据集,另一个有“名册”,其中包含我要专门查看的用户名。
翻阅Stata文档,似乎我想使用keep if exp
但我不知道该表达什么。如果不从我的工作空间中清除主数据集,我什至无法将名册加载到 Stata。如何在不清除主文档的情况下引用此单独的 dta 文档?
解决方案
最简单的方法是keep if inlist(username, "user1", "user2", ...)
。问题是,inlist()
最多只能比较 10 个字符串值。如果你有更多,你必须merge
, 或 使用正则表达式。
假设我们有这个数据集,保存为 all_users.dta:
input str6 username
"user_a"
"user_b"
"user_c"
"user_d"
"user_e"
"user_f"
"user_g"
"user_h"
"user_i"
"user_j"
"user_k"
"user_l"
"user_m"
"user_n"
"user_o"
"user_p"
"user_q"
"user_r"
"user_s"
"user_t"
end
我们还有第二个数据集,保存为 usernames.dta:
input str6 username
"user_a"
"user_b"
"user_c"
"user_d"
"user_e"
"user_f"
"user_g"
"user_h"
"user_i"
"user_j"
"user_k"
"user_l"
"user_m"
"user_n"
"user_o"
end
那么这些将是仅保留用户名在 usernames.dta 中的 all_users.dta 的观察结果的两种方法:
*** MERGE ***
clear
use all_users
merge m:1 username using usernames
keep if _merge == 3
*** REGEX ***
clear
use usernames
levelsof username, local(usernames)
use all_users, clear
// Create regular expression
foreach username of local usernames {
local regex `regex'|`username'
}
local regex `=substr("`regex'", 2, .)'
keep if regexm(username, "^(`regex')$")
推荐阅读
- python-3.x - 生产中的 Django 应用程序 Dockerisation
- jquery - 在 Krajee Bootstrap 文件输入插件中浏览/拖放文件时,同一文件在拖放区中添加了两次
- bash - 用于创建多个文件的 shell 脚本,在下次执行时从最后一个文件递增
- python - 如何从嵌套字典中获取数据?
- python - 在 Python 中获取操作系统范围的十进制和数千个分隔符
- python - Python Turtle Graphics 窗口不显示任何内容
- unit-testing - 使用 Jest 测试 Vue3 组件时如何模拟计算属性
- arrays - How To Replace All Matching Array Elements?
- flutter - 颤振测试是否有“快速失败”选项?
- rest - Drupal 8-9 REST 翻译