楼主: Larwence
10683 11

[数据管理求助] 如何一次性将文件夹中的xls文件全部转化为dta文件 [推广有奖]

  • 0关注
  • 0粉丝

高中生

35%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
205 点
帖子
17
精华
0
在线时间
36 小时
注册时间
2013-4-28
最后登录
2023-7-15

楼主
Larwence 发表于 2014-8-16 18:40:57 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
由于做过几次实证研究,每次动手发现都是做重复的事情,其中之一就是将excel文件转化为Stata的dta文件,我想,可不可以写条命令直接省去这些步骤,这样就可以少一些枯燥的重复之苦,下面是小弟编写的一条命令,但系统提示有问题,请各位大牛赐教。
我将csv格式的文件全部放到一个文件夹里面,然后cd到此工作目录下:

local ff : dir . files "*.csv"        
dis `"`ff'"'                                 
foreach f of local ff{
   import excel "`f'"
   save "`f'".dta
   clear
}


请问哪里出错了,如何改正?谢谢。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:DTA文件 xls dta 文件夹 一次性 文件夹 如何

本帖被以下文库推荐

沙发
xiaotao0800 发表于 2014-8-16 18:58:08
学习      

藤椅
Larwence 发表于 2014-8-16 20:13:25
后面我想,是不是由于命名的原因,于是加了一个序号,但还想不行,运行结果是invalid '"2010.xlsx'
以下是修正后的程序
local j = 1
local ff : dir . files "*.xlsx"
disp `"`ff'"'
#delimit ;
foreach file in `"`ff'"' {;
  qui import excel using ${path}/`file',clear firstrow;
  qui save ${path}/dta/`j',replace;
  local j =`j'+1;
  };
  #delimit cr

板凳
Larwence 发表于 2014-8-16 20:15:29
我以为想循环出了问题,于是将循环改成了逐一替代法
clear
local j = 1
#delimit ;
foreach file in 2010.xlsx
2011.xlsx
2012.xlsx{;
  import excel using ${path}/`file',clear firstrow;
  qui save ${path}/dta/`j',replace;
  local j =`j'+1;
  };
  #delimit cr

结果是 file E:/stata培训/wind2007/2010.xlsx could not be loaded

why!?

报纸
bwhbwh 发表于 2014-8-16 22:23:04
cd d:\mydir
! dir *.csv /a-d /b >d:\filelist.csv
file open myfile using "d:\filelist.csv", read
file read myfile line
while r(eof)==0 {
        insheet using `line', comma names
        save `line'.dta, replace

地板
Larwence 发表于 2014-8-17 15:50:48
bwhbwh 发表于 2014-8-16 22:23
cd d:\mydir
! dir *.csv /a-d /b >d:\filelist.csv
file open myfile using "d:\filelist.csv", read
您的这句命令的结果是
file handle myfile already exists
r(110);

不知道什么原因

7
bwhbwh 发表于 2014-8-17 21:14:24
Larwence 发表于 2014-8-17 15:50
您的这句命令的结果是
file handle myfile already exists
r(110);
! dir *.csv /a-d /b >d:\filelist.txt

8
蓝色 发表于 2014-8-17 21:25:30
https://bbs.pinggu.org/thread-1146219-1-1.html

[size=11.818181991577148px]
cd "d:\datafiles\" **把这里换成你数据所在的路径**

local filelist: dir . files "*.csv"
foreach file of local filelist {
        insheet using `file',  comma clear
        saveold `file'.dta,replace
}

https://bbs.pinggu.org/thread-2821793-1-1.html

已有 1 人评分论坛币 学术水平 热心指数 收起 理由
crystal8832 + 10 + 1 + 1 热心帮助其他会员

总评分: 论坛币 + 10  学术水平 + 1  热心指数 + 1   查看全部评分

9
Larwence 发表于 2014-8-18 16:13:55
蓝色 发表于 2014-8-17 21:25
https://bbs.pinggu.org/thread-1146219-1-1.html
为什么我改写成这样,想转换excel格式的文件,却只能转化成一条记录,帮我看看谢谢!
cd E:wind2007\hezhen
local filelist: dir . files "*.xlsx"
foreach file of local filelist {
        import excel using `file', firstrow clear
        saveold `file'.dta,replace
}

10
Larwence 发表于 2014-8-18 16:23:19
bwhbwh 发表于 2014-8-17 21:14
! dir *.csv /a-d /b >d:\filelist.txt
还是同样的结果哦:file handle myfile already exists
你的思路是先csv格式的文件名保存到一个txt文档中,然后依次读入就行保存,对吧?

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-28 13:34