Stataにエクセルシートをいっぱいインポートしたいとき

Stataへエクセルシートやcsvを取り込みたいとき、左上のボタンをポチポチしても投稿できるが、結構めんどくさいので一般的にはdoファイルにコードを書いて読み込む。

そして、エクセルにシートがいっぱい入っているときはそれぞれバナーから選択してokボタンを押しまくらないといけないので結構大変。

だから、普通は

import excel using ファイル名, sheet("sheet1")

とかいう感じで書く。あとエクセルの1行目は大体変数名になっているのでfirstlowオプションを付ける。また、不親切なデータでは1行目にタイトルを書いてあったりして分析する人にやさしくないことがあるので

import excel using ファイル名, sheet("sheet1") cellrange(A5:K50)

のような感じで範囲の設定もできる。

ここからが本題だが、エクセルのシートが例えば1000個とかあったらこのような作業を1000回繰り返さないといけないのかということであるがそんなことはやりたくない。

やり方を説明する。
まず

import excel using ファイル名, describe

でエクセルのシート名と範囲の一覧を見ることができる。そして、見れただけだと何もうれしくないので

return list

と打つとリストを手に入れることができる。

そして、リストの中には、n番目のシート名が"r(worksheet_n)"と出ているのでこれを用いてforvalues でループさせる。これをすることのメリットは、シート名が統一されていないとき("Sheet1"などのデフォルトな名前ではないとき)に便利なこと。

下にコードの例を載せておく。

import excel using "ファイル名", desc
return list
clear
forvalues i=1/1000{
import excel using "ファイル名.xlsx", sheet(`r(worksheet_`i')') cellrange(A2:K20) firstrow
gen sheet =r(worksheet_`i') //どこのシートにあったのかの変数
save file_`i'.dta, replace //名前は適当
clear
}

この記事が気に入ったらサポートをしてみませんか?