楼主: raphaello
4862 8

[数据管理求助] 数据循环导入问题求助! [推广有奖]

  • 0关注
  • 0粉丝

高中生

12%

还不是VIP/贵宾

-

威望
0
论坛币
695 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
127 点
帖子
14
精华
0
在线时间
21 小时
注册时间
2009-11-5
最后登录
2016-6-23

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我只看过一晚上stata.....所以多多包涵.....

我现在想把1000个.xls文件转换为.dta文件,打算用循环来实现

但是在这个循环中,我如何让第一次循环是转换第一个文件,第二次循环转换第二个文件,以此类推.....比方说文件名是1.xls到1000.xls

或者有什么更好的方法吗?

先谢过了
二维码

扫码加我 拉你入群

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

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

关键词:DTA文件 Stata tata 文件转换 xls 如何

沙发
voodoo 发表于 2010-4-7 22:20:17 |只看作者 |坛友微信交流群
以下纯属个人见解,也请高手支招。

假如你的文档是以逗号分隔的.csv或以tab分隔的.txt文档,那还有办法直接用:
forvals i=1/1000 {
    insheet ... using ...
    save ...
}
完成打开、转换和合并工作。

但假如你的文档如假包换是.xls文档,那恐怕就没有太多办法了,见
http://www.stata.com/support/faqs/data/newexcel.html

有个间接的办法是:考虑用“autoit”、“鼠标精灵”或“按键精灵”这样的自动工具将1000个.xls文档逐一用excel打开,然后另存为.csv或.txt文档。然后再用
forvals i=1/1000 {
    insheet ... using ...
    save ...
}
巫毒上传,必属佳品!
坛友下载,三思后行!

使用道具

藤椅
raphaello 发表于 2010-4-7 23:13:28 |只看作者 |坛友微信交流群
我不明白的是,如果我在第一次循环中insheet using 1.xls,怎么实现在第二次循环里insheet using 2.xls

使用道具

板凳
h3327156 发表于 2010-4-8 01:09:30 |只看作者 |坛友微信交流群
forvals i=1/1000 {
    insheet ... using `i'.xls
    save ...
}

可能是您需要的

使用道具

报纸
voodoo 发表于 2010-4-8 11:38:03 |只看作者 |坛友微信交流群
h3327156 发表于 2010-4-8 01:09
forvals i=1/1000 {
    insheet ... using `i'.xls
    save ...
}

可能是您需要的
.xls文档没办法直接用insheet命令导入Stata的。
巫毒上传,必属佳品!
坛友下载,三思后行!

使用道具

地板
voodoo 发表于 2010-4-8 11:44:44 |只看作者 |坛友微信交流群
raphaello 发表于 2010-4-7 21:38
我只看过一晚上stata.....所以多多包涵.....

我现在想把1000个.xls文件转换为.dta文件,打算用循环来实现

但是在这个循环中,我如何让第一次循环是转换第一个文件,第二次循环转换第二个文件,以此类推.....比方说文件名是1.xls到1000.xls

或者有什么更好的方法吗?

先谢过了
      

我在2楼的帖子被你的思路给误导了。

事实上最简便的方法就是用论坛上下载并安装个Stat/Transfer,然后“开始→所有程序→StatTransfer9→StatTransfer Command Processor”打开dos界面,在ST: 提示符下输入
            copy c:\data\*.xls c:\data\*.dta /t1 /y
假定你1000个excel文档存在c:\data文件夹下,而目标文件夹也是c:\data。

关于此问题比较全面的讨论参见http://www.stata.com/statalist/archive/2007-09/msg00341.html
巫毒上传,必属佳品!
坛友下载,三思后行!

使用道具

7
raphaello 发表于 2010-4-8 18:56:13 |只看作者 |坛友微信交流群
再次求教一下

forvals i=1/1000 {
    insheet ... using `i'.xls
    save ...

里边的`i'.xls是什么意思....?
比方说我有两个文件1.xls和2.xls,那么insheet using `i'.xls是说我在第一次循环中读入1.xls,在第二次循环中读入2.xls吗?
假如我的文件名是a.xls和b.xls怎么办呢?

使用道具

8
bbs0805 发表于 2010-4-8 21:04:13 |只看作者 |坛友微信交流群
先安装StatTransfer,在stata中下载并安装stcmd命令套装, 在工作目录下运行以下DO文件
  set more off
    forvalue i=1/1000 {
        clear
        inputst `i'.xls
       save `i'.dta,replace
    }

使用道具

9
wxh1000 发表于 2013-11-10 17:01:23 |只看作者 |坛友微信交流群

使用 StatTransfer Command Processor 批量转换数据文件的格式

顶。。不过有个更加简单的方法,不用写循环。。我再完善一下楼上 voodoo 的步骤吧~

使用 StatTransfer Command Processor 批量转换数据文件的格式  (比如 *.xpt -> *.dta)

这个需要用到一个 Stat/Transfer 提供的类似 DOS 的界面——StatTransfer Command Processor 里。直接在 Windows 点击开始->所有程序->StatTransfer 9.0->StatTransfer Command Processor(我的是 StatTransfer 9.0 安装版。。不知道绿色版如何弄),然后进行下面两步:
1、改路径。比如这个文件夹在 D:\data 下,那么就输入:
  1. cd D:\data
复制代码

2、进行批量转换。比如要将 D:\data 文件夹下的所有 SAS 格式的文件 *.xpt 批量转换为 Stata 格式的 *.dta 文件,那么输入:
  1. copy   \  in \ *.xpt   \  out  \ *.dta
复制代码

(这期间第一次可能会提示出错,可能是空格的问题,在反斜杠 "\" 之后加几个空格试试,在 copy 之后也加几个空格试试)

详细的用法在 Stat/Transfer 的 Log -> Help 文件里的 The command processor 里。

使用道具

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

本版微信群
加好友,备注jltj
拉您入交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-11-6 00:26