楼主: benbenbenben
10946 15

[数据管理求助] 关于用foreach合并多个数据file的问题 [推广有奖]

11
voodoo 发表于 2014-5-15 09:53:59
给你一个没有中间dta文档输出的解决方案,不妨试试:
  1. clear
  2. save final.dta, replace emptyok
  3. local ff: dir "." files "*.csv"
  4. foreach f of local ff {
  5.     insheet using "`f'", clear
  6.     gen fileid = "`f'"
  7.     append using final.dta, force
  8.     save final.dta, replace
  9. }
复制代码
巫毒上传,必属佳品!
坛友下载,三思后行!

12
benbenbenben 发表于 2014-5-16 06:13:33
voodoo 发表于 2014-5-15 09:53
给你一个没有中间dta文档输出的解决方案,不妨试试:
It works! Many thx!

但是在合并的过程中,虽然每个file的变量和格式都相同,但是同一个变量在不同的file里的string长度不同,而且同一个变量在不同file里有的是string,有的是numerical, 本来想一个一个修改,可是变量和file实在是太多,请问这个问题如何在loop实现的合并中一并解决呢,还请大侠赐教!

13
voodoo 发表于 2014-5-16 10:26:22
benbenbenben 发表于 2014-5-16 06:13
It works! Many thx!

但是在合并的过程中,虽然每个file的变量和格式都相同,但是同一个变量在不同的 ...
这依赖你的具体问题和数据情况。
1. string长度不同,这没关系,append时Stata会根据情况自动帮你增加string变量的长度;
2. 变量类型不同,首先要搞清楚,为什么相同的变量导入Stata后会出现不同的变量类型。搞清楚后,就可以在loop循环中具体情况加以处理啦。在insheet命令之后加上类似的变量类型转换语句可能有助于解决问题:

    ...
    tostring _stkcd_, replace        // _stkcd_为在不同文件中类型不同的变量名
    ...





巫毒上传,必属佳品!
坛友下载,三思后行!

14
benbenbenben 发表于 2014-5-16 11:09:05
voodoo 发表于 2014-5-16 10:26
这依赖你的具体问题和数据情况。
1. string长度不同,这没关系,append时Stata会根据情况自动帮你增加st ...
谢谢,我的目的是想把同一变量的string长度设置为所有文件中同一变量所存在的最大string长度;我的担心是,在append时,会按照最短的string长度截取,不同file中的同一变量,如果string长度大于最小的长度,会被自动截取。不会存在这个问题吗?

完全相同的变量和结构的多个文件,同样的方式导入,不知道为什么会出现不同的变量类型:( 而且无规律可循,变量60多个,绝大多数都存在这样的问题,_stkcd_ 这里有没有可以包含所有变量的coding,把所有变量都转化一遍,否则要列出所有的变量名,谢谢。

15
voodoo 发表于 2014-5-16 11:20:07
benbenbenben 发表于 2014-5-16 11:09
谢谢,我的目的是想把同一变量的string长度设置为所有文件中同一变量所存在的最大string长度;我的担心是 ...
回答:
1. 不会。Stata够Smart,不会犯这种错误;
2. 你还是要搞清楚问题所在,而不能一味tostring。tostring后,很多后续统计分析就没法进行啦!


巫毒上传,必属佳品!
坛友下载,三思后行!

16
benbenbenben 发表于 2014-5-16 11:34:33
voodoo 发表于 2014-5-16 11:20
回答:
1. 不会。Stata够Smart,不会犯这种错误;
2. 你还是要搞清楚问题所在,而不能一味tostring。to ...
Thank you sooooooo... much!

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

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