R 如何使用Stata在大量数据库中查找公共变量

R 如何使用Stata在大量数据库中查找公共变量,r,database,variables,stata,R,Database,Variables,Stata,所以我在Stata有大量的数据库(82个),每个数据库包含大约1300个变量和数千个观察值。其中一些数据库包含给出某些概念的平均值或标准偏差的变量。例如,这样一个数据集中的变量可以称为“杠杆平均值”。现在,我想知道哪些数据集包含称为concept_-mean或concept_-sd的变量,而不必手动检查每个数据集 我在想,也许有一种方法可以在数据库中循环寻找包含“mean”或“sd”的变量,不幸的是,我不知道如何做到这一点。我使用的是R和Stata数据文件。是的,您可以使用Stata和R中的循环

所以我在Stata有大量的数据库(82个),每个数据库包含大约1300个变量和数千个观察值。其中一些数据库包含给出某些概念的平均值或标准偏差的变量。例如,这样一个数据集中的变量可以称为“杠杆平均值”。现在,我想知道哪些数据集包含称为concept_-mean或concept_-sd的变量,而不必手动检查每个数据集


我在想,也许有一种方法可以在数据库中循环寻找包含“mean”或“sd”的变量,不幸的是,我不知道如何做到这一点。我使用的是R和Stata数据文件。

是的,您可以使用Stata和R中的循环来完成这项工作。首先,您应该检查Stata命令
ds
和包
findname
,它将完成这里描述的许多工作,以及更多工作。但为了向您展示“引擎盖下”正在发生的事情,我将在下面展示可以实现这一点的Stata代码:

/*Set your current directory to the location of your databases*/
cd "[your cd here]"
使用stata的dir宏函数将82个数据库的名称保存到名为“filelist”的列表中。注意:您没有指定数据库文件是什么类型的文件,所以我假设是.xls。此命令将扩展名为“.xls”的所有文件保存到列表中。保存到列表中的文件类型以及导入数据库的方式取决于正在读取的文件类型

local filelist : dir . files "*.xls"
然后循环所有文件,以显示哪些文件包含以“\u sd”或“\u mean”结尾的变量


最后注意,这个循环将只显示数据库名称和其中包含的感兴趣的变量。如果要对数据执行操作或执行其他操作,则需要将这些操作包括在最终“显示”命令的位置(您可能最终需要也可能不需要该命令)。

您可以使用
filelist
,(来自SSC)创建文件数据集。要安装
文件列表
,请在Stata的命令窗口中键入:

ssc install filelist
有了内存中的数据集列表,您可以在每个文件上循环,并使用
description
获取每个文件的变量列表。可以将此变量列表存储在单个字符串变量中。例如,以下内容将收集与Stata一起提供的所有Stata数据集的名称,然后为每个数据集存储它们包含的变量:

findfile "auto.dta"
local base_dir = subinstr("`r(fn)'", "/a/auto.dta", "", 1)

dis "`base_dir'"
filelist, dir("`base_dir'") pattern("*.dta")

gen variables = ""
local nmatch = _N
qui forvalues i = 1/`nmatch' {
    local f = dirname[`i'] + "/" + filename[`i']
    describe using "`f'", varlist
    replace variables = " `r(varlist)' " in `i'
}
leftalign  // also from SSC, to install: ssc install leftalign
一旦您在内存中的数据中有了所有这些信息,您就可以轻松地搜索特定的变量。例如:

. list filename if strpos(variables, " rep78 ")

     +-----------+
     | filename  |
     |-----------|
 13. | auto.dta  |
 14. | auto2.dta |
     +-----------+

欢迎来到StackOverflow。请看一下这些关于如何制作a的技巧,以及上的这篇文章。也许下面的提示也值得一读。我明白了,在R中也是这样吗?你能给我看看吗?抱歉,我是新手。因此在R中我尝试了以下方法:(f我将尝试使用函数
list.files()
然后
apply()构建文件列表)在这个列表中,。我对R不太熟练,我还没有测试过代码,所以让我知道它是如何运行的。函数<代码>命名空间()/代码>将给出数据中包含的变量的列表。如果你实际上喜欢R中的答案,你可能想考虑编辑你的问题。现在我得到了这个:TEMP= List.Fr.文件。(pattern=“*.dta”)然后我为(I in 1:length(temp))赋值(temp[I],读取.dta13(temp[I]),并使用grep(pattern=“\m”,temp,value=TRUE),但这会使我的文件名包含m,但我希望变量名以_m结尾,以及它们所在的数据集
. list filename if strpos(variables, " rep78 ")

     +-----------+
     | filename  |
     |-----------|
 13. | auto.dta  |
 14. | auto2.dta |
     +-----------+