楼主: taojikun
4241 10

[编程问题求助] 求助?怎样用foreach命令导入指定硬盘里面的数据? [推广有奖]

  • 0关注
  • 0粉丝

本科生

32%

还不是VIP/贵宾

-

威望
0
论坛币
243 个
通用积分
0
学术水平
3 点
热心指数
14 点
信用等级
0 点
经验
1312 点
帖子
73
精华
0
在线时间
94 小时
注册时间
2012-7-20
最后登录
2016-4-9

楼主
taojikun 发表于 2014-11-29 11:07:27 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
本人最近在学stata基本操作,尝试着用foreach命令批量导入指定硬盘数据,但是鼓捣很长时间也操作不成功?现把操作命令复制如下: do "C:\Users\inm\AppData\Local\Temp\STD00000000.tmp"
. foreach file  in D:\data\d3-d9 {
  2. local varname  id time mar mat maw max
  3. insheet `varname' using `file'.txt, clear
  4. save `file'.dta,replace
  5. }
file D:\data\d3-d9.txt not found
r(601);
请求各位高手指点


二维码

扫码加我 拉你入群

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

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

关键词:foreach Reach For insheet replace replace local Users file

沙发
voodoo 发表于 2014-11-29 11:17:12
必须先用宏扩展函数获得指定文件夹下的文件名列表,然后再用foreach循环。
help extended_fcn

藤椅
taojikun 发表于 2014-11-29 18:35:53
谢谢啊

板凳
玄一无相 在职认证  学生认证  发表于 2015-9-27 09:42:10
如果直接放在更改过后的默认目录下,是否可以呢?期待答复

报纸
天斯吾下 学生认证  发表于 2015-9-28 16:30:19
玄一无相 发表于 2015-9-27 09:42
如果直接放在更改过后的默认目录下,是否可以呢?期待答复
cd "你的工作路径"
local myfilelist: dir . files "*.xlsx" //后缀名,看你要处理什么文件

foreach filename of local myfilelist {
import excel `"`filename'"', sheet("1") firstrow allstring clear  //因为我一般处理Excel,所以这样写

save `"`filename'"'.dta, replace
}
已有 1 人评分经验 学术水平 热心指数 信用等级 收起 理由
玄一无相 + 100 + 1 + 1 + 1 鼓励积极发帖讨论

总评分: 经验 + 100  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

地板
玄一无相 在职认证  学生认证  发表于 2015-9-28 22:11:29
天斯吾下 发表于 2015-9-28 16:30
cd "你的工作路径"
local myfilelist: dir . files "*.xlsx" //后缀名,看你要处理什么文件
你这个好像会提示invalid '.dta'

我尝试过,直接默认地址是可以的,用楼主的方法也可以,只要是在同一个目录下,默认目录下,

但是我发现只能手动写file1 file2 file3,而不能file1-file3,就像楼主遇到的,不晓得你这个是不是是针对这个问题的,谢谢
已有 1 人评分经验 热心指数 收起 理由
夏目贵志 + 5 + 1 热心帮助其他会员

总评分: 经验 + 5  热心指数 + 1   查看全部评分

7
天斯吾下 学生认证  发表于 2015-9-29 10:30:25
玄一无相 发表于 2015-9-28 22:11
你这个好像会提示invalid '.dta'

我尝试过,直接默认地址是可以的,用楼主的方法也可以,只要是在同一 ...
不好意思啊,应该是最后的save那一句会报错,您稍微改一下就行(可以把filename这个宏改一下),其实我一般会给文件名编号。不知道您具体对文件名什么需求

8
玄一无相 在职认证  学生认证  发表于 2015-9-29 11:35:02
天斯吾下 发表于 2015-9-29 10:30
不好意思啊,应该是最后的save那一句会报错,您稍微改一下就行(可以把filename这个宏改一下),其实我一 ...
我也都是数字编号的,比如1001-1053,一共53个文件
我也觉得应该只有最后那个save出问题了,不晓得应该怎么改呢

9
天斯吾下 学生认证  发表于 2015-9-29 16:03:57
玄一无相 发表于 2015-9-29 11:35
我也都是数字编号的,比如1001-1053,一共53个文件
我也觉得应该只有最后那个save出问题了,不晓得应该怎 ...
您看这样改行不行
  1. cd "你的工作路径"
  2. local myfilelist: dir . files "*.xlsx" //后缀名,看你要处理什么文件

  3. foreach filename of local myfilelist {
  4. import excel `"`filename'"', sheet("1") firstrow allstring clear
  5. local a=`"`filename'"'
  6. local b: subinstr local a ".xlsx" ".dta"
  7. save `"`b'"',replace
  8. }
复制代码
已有 1 人评分经验 学术水平 热心指数 信用等级 收起 理由
玄一无相 + 100 + 5 + 5 + 5 热心帮助其他会员

总评分: 经验 + 100  学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

10
玄一无相 在职认证  学生认证  发表于 2015-9-29 21:20:23
天斯吾下 发表于 2015-9-29 16:03
您看这样改行不行
非常OK

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

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