我有大约40个g1, g2, ..., g6
个文件,所有文件都包含相同的变量但是针对不同的观察单位。我想使用Stata遍历我拥有所有40个文件的目录,以执行以下操作:
将每个文件加载到Stata中,然后导出到Excel工作表中。这个想法是有一个Excel工作簿,有40张 - 每个.dta文件一个。
在40个文件中的每个文件中,计算名为.dta
的变量的不同观察数的数量。输出可以保存到与1不同的Excel表格中。但我可以提供建议。
我之前从未使用car_type
或循环,所以任何帮助都会非常感激。我知道,对于第1步,我可以为local
编写一个do
文件,然后为每个文件编写use "C:\File1.dta
,但我不想手动重复此文件每个文件都有一个。
答案 0 :(得分:1)
您可以将此作为模板开始使用:
set more off
/* (A) Create 5 Fake Datasets file1,...,file5 */
sysuse auto, clear
forvalues i=1/5 {
preserve
keep if rep78==`i'
tab rep78
save "file`i'.dta", replace
restore
}
/* (B) Export Fake Files to Excel */
capture erase "my_excel_file.xls" // erase Excel file if it exists
ssc install distinct
ssc install fs
fs "file*.dta" // get a list of files to export to Excel
/* loop over this list, opening each one, calculate distinct values, and put the data below that */
foreach f in `r(files)' {
quietly {
use "`f'", clear
distinct make
generate distinct_vals_of_make = r(ndistinct) in 1
export excel distinct_vals_of_make using "my_excel_file", sheet("`f'") firstrow(variables) cell(A1)
drop distinct_vals_of_make
export excel using "my_excel_file", sheet("`f'", modify) firstrow(variables) cell(A4)
}
}
shell open "my_excel_file.xls"
<强>数目:强>
r(files)是包含fs
返回的文件列表的本地宏的名称。当您使用后引号和结束引号括起名称时,r(文件)将吐出该列表。 &#34; foreach f in&#34;只是一种在顺序循环遍历它们时引用该列表的每个元素的方法。你可以写&#34; foreach file_name in&#34;同样如此。每次循环迭代时,将重新定义f(或file_name)以包含下一个文件,该文件可以使用后引用加上f加上结束引号获得。 in 1
表示Stata数据集的第一行。
最后,我认为你可以用
做到这一点 /* loop over this list, opening each one, calculate distinct values, update the stats sheet, and put the data in a seprate sheet */
/* Initialize the names */
gen file_name=.
gen distinct_vals_of_make=.
export excel file_name distinct_vals_of_make using "my_excel_file", sheet("stats") firstrow(variables)
local j=2
foreach f in `r(files)' {
quietly {
use "`f'", clear
gen file_name = "`f'" in 1
distinct make
generate distinct_vals_of_make = r(ndistinct) in 1
export excel file_name distinct_vals_of_make using "my_excel_file", sheet("stats", modify) cell(A`j')
local ++j
drop distinct_vals_of_make file_name
export excel using "my_excel_file", sheet("`f'") firstrow(variables)
}
}