如何在Stata中循环多个Excel文件?

这里是我有的代码:

local dateList "01" "02" "03" "04" "05" "06" "07" foreach date of local dateList { use `"`date'"' clear import excel "V:\Report07" + `"`date'"' + "13.xls", sheet("MySheet") firstrow sort PersonID Place bysort PersonID (Place): gen mix = Place[1] != Place[_n] sort PersonID by PersonID: egen anymix=max(mix) count if anymix==1 drop mix drop anymix } 

我试图循环通过date不同的多个Excel文件,正如你可以在代码中看到的那样放置variablesdate 。 例如,此电子表格的名称为Report070113 ,表示2013年7月1日。下次通过循环导入报告名为Report070213 。 我认为这样做的最好方法是创build一个string数组,这个月份的各个date,所以我可以每月运行代码,并获得每个访问过不同地方的人数。 我知道什么是在循环内工作正常,但我有麻烦的for循环本身。 当我有:

 use `"`date'"' 

在代码(第3行),它给我以下错误:

 file 01".dta not found 

但是,当我不包括这一行,它给了我这个错误:

 using required 

任何帮助,将不胜感激; 如果我的问题不清楚,请告诉我。

查看使用单引号双引号之间的区别:

 clear all set more off local dateList "01" "02" "03" "04" "05" "06" "07" foreach date of local dateList { disp `"`date'"' disp "`date'" } 

问题是macros列表的第一个元素是01"而不是01 ,所以Stata找不到这个文件,这是由于你声明macros列表的方式,然后用双引号调用。一个相关的阅读在这里。

对我来说,这样做更清楚:

 clear all set more off local dateList 01 02 03 04 05 06 07 foreach date of local dateList { disp `"`date'"' disp "`date'" display "V:/Report07`date'13.xls" * This should work for you (uncomment) *import excel "V:/Report07`date'13.xls", sheet("MySheet") firstrow } 

请注意macros的声明不包含引号。 现在使用双引号或单引号可以得到相同的结果。 为源文件创buildstring很简单。 另外,build议是使用/而不是\ 。 这使得代码跨其他操作系统兼容。 Stata将使它适用于MS Windows,包括在内。 参考是Stata提示65:谨防 Nicholas J. Cox 的背刺反斜杠 。

至于using required错误,我的猜测是这与import excel期待一个string而不是一个代数expression式 。 给命令添加一个简单的+会重现你的错误。 例如:

 . import excel "V:/Report07" + using required r(100); 

Stata不理解符号,所以它抱怨; 它想要一些代表文件path的string。 (如果运行import excel "V:/Report07 +" ,则会发生不同的情况。

尝试修改您的“导入excel”文件path:

 local dateList "01" "02" "03" "04" "05" "06" "07" foreach date of local dateList { clear import excel "V:\Report07\`date'13.xls", sheet("MySheet") firstrow sort PersonID Place bysort PersonID (Place): gen mix = Place[1] != Place[_n] sort PersonID by PersonID: egen anymix=max(mix) count if anymix==1 drop mix drop anymix } 

如果仍然要求“使用所需”,那么请尝试“使用…导入excel”。