楼主: richardqmul
6937 20

请教一个关于local list dir .的问题.谢谢 [推广有奖]

11
davalic 发表于 2008-5-20 14:13:00

为什么到dis `name'就报错呢,stata10.0SE

1.dta no variables defined
r(111);

12
arlionn 在职认证  发表于 2008-5-20 15:02:00

try this, pls

. dis `"`name'"'

13
davalic 发表于 2008-5-20 15:07:00

谢谢,问题找出来了,这里面文件数据结构一样就没有问题了

14
richardqmul 发表于 2008-5-20 17:51:00

感谢版主的指导.  在"local name=subinstr(`"`list'"', "dta", "dta ",  .  )" 命令中, subinstr 是string 类型的命令, 但是`"`list'"' 是macro类型, 如果在文件里的dta文件名总和超过202左右character个字符. 程序就会出错. 请帮忙试试. 谢谢

15
richardqmul 发表于 2008-5-20 18:18:00

.

即使我用word 命令, 字符太长的话还是不能提取全部的文件名,具体步骤如下:

 ****************************************use marco to record all the files name*********************
.
. local list : dir . files"*.dta"

.
. dis `list'
1.dtaorbis_usa_2943-2950.dtaorbis_usa_2951-2960.dtaorbis_usa_2961-2970.dtaorbis_usa_2971-2980.dtaorbis_usa_2981-2990.dtaorbis
> _usa_2991-3010.dtaorbis_usa_3011-3030.dtaorbis_usa_3031-3050.dtaorbis_usa_3051-3080.dtaorbis_usa_3081-3100.dtaorbis_usa_310
> 1-3120.dtaorbis_usa_3121-3148.dtaorbis_usa_6425-6450.dtaorbis_usa_6451-6490.dtaorbis_usa_6491-6528.dta

.
. dis `"`list'"'
"1.dta" "orbis_usa_2943-2950.dta" "orbis_usa_2951-2960.dta" "orbis_usa_2961-2970.dta" "orbis_usa_2971-2980.dta" "orbis_usa_29
> 81-2990.dta" "orbis_usa_2991-3010.dta" "orbis_usa_3011-3030.dta" "orbis_usa_3031-3050.dta" "orbis_usa_3051-3080.dta" "orbis
> _usa_3081-3100.dta" "orbis_usa_3101-3120.dta" "orbis_usa_3121-3148.dta" "orbis_usa_6425-6450.dta" "orbis_usa_6451-6490.dta"
>  "orbis_usa_6491-6528.dta"

.
.
.
. ****************************************allocate name of the file to x`m' *********************
.
.
.
. forvalue m=1/15 {
  2.
. local x`m'=word(`"`list'"',`m')
  3.
. dis `x`m''
  4.
. }
1.dta
orbis_usa_2943-2950.dta
orbis_usa_2951-2960.dta
orbis_usa_2961-2970.dta
orbis_usa_2971-2980.dta
orbis_usa_2981-2990.dta
orbis_usa_2991-3010.dta
orbis_usa_3011-3030.dta
orbis_usa_3031-3050.dta
orbis_usa_3051-3080.dta
or

在or 这停住了。还是不能把所有文件全部显示出来。请指出.谢谢

16
蓝色 发表于 2008-5-20 18:28:00
以下是引用richardqmul在2008-5-20 0:35:00的发言:

是的, 对我的数据整理有用.

文件夹里有多个dta 文件. 但执行的DO-files 命令将都是一样的. 每个dta 都是400M 以上, append 不了. 要能foreach 每个dta文件名,会省大量的时间. 谢谢

1、你到底是要作什么东西?

2、你的数据文件dta,命名的格式是否有规律?

而且你说你的每个文件有400M,那还是劝你不用用stata了

stata受内存的限制的。

17
richardqmul 发表于 2008-5-20 20:45:00

1. 我要循环运用同一个文件夹里的STATA文件. 文件名分别是orbis_usa_2943-2950.dta, orbis_usa_2951-2960.dta, orbis_usa_2961-2970.dta; ... 等.

2. 每个dta文件是都是以orbis_usa_开头. 但后面的象2951-2960是由公司号码决定(没有规律).orbis_usa_2943-2950.dta里包括从2943名公司到2950公司. 我已经把内存调到了800M.

谢谢.


18
蓝色 发表于 2008-5-20 21:23:00

不是内存800m的问题

是你如果每个文件都是400M

你是要合并数据库码

还是其它目的

有的是可能笨办法是最省事的办法

19
richardqmul 发表于 2008-5-20 23:35:00

谢谢版主和各位的指点.

我最终还是写出来了. 我想我用gettoken可以得出.

. ****************************************use marco to record all the files name*********************
.
. local list : dir . files"*.dta"
. dis `list'
1.dtaorbis_usa_2943-2950.dtaorbis_usa_2951-2960.dtaorbis_usa_2961-2970.dtaorbis_usa_2971-2980.dtaorbis_usa_2981-2990.dtaorbis
> _usa_2991-3010.dtaorbis_usa_3011-3030.dtaorbis_usa_3031-3050.dtaorbis_usa_3051-3080.dtaorbis_usa_3081-3100.dtaorbis_usa_310
> 1-3120.dtaorbis_usa_3121-3148.dtaorbis_usa_6425-6450.dtaorbis_usa_6451-6490.dtaorbis_usa_6491-6528.dta

.
. dis `"`list'"'
"1.dta" "orbis_usa_2943-2950.dta" "orbis_usa_2951-2960.dta" "orbis_usa_2961-2970.dta" "orbis_usa_2971-2980.dta" "orbis_usa_29
> 81-2990.dta" "orbis_usa_2991-3010.dta" "orbis_usa_3011-3030.dta" "orbis_usa_3031-3050.dta" "orbis_usa_3051-3080.dta" "orbis
> _usa_3081-3100.dta" "orbis_usa_3101-3120.dta" "orbis_usa_3121-3148.dta" "orbis_usa_6425-6450.dta" "orbis_usa_6451-6490.dta"
>  "orbis_usa_6491-6528.dta"


. ****************************************allocate name of the file to "`left'" *********************
.
.
.
. forvalue m=1/15 {
  2.
. gettoken left`m' list: list, parse("  ")
  3.
. dis "`left`m''"
  4.
. }

orbis_usa_2943-2950.dta
orbis_usa_2951-2960.dta
orbis_usa_2961-2970.dta
orbis_usa_2971-2980.dta
orbis_usa_2981-2990.dta
orbis_usa_2991-3010.dta
orbis_usa_3011-3030.dta
orbis_usa_3031-3050.dta
orbis_usa_3051-3080.dta
orbis_usa_3081-3100.dta
orbis_usa_3101-3120.dta
orbis_usa_3121-3148.dta
orbis_usa_6425-6450.dta
orbis_usa_6451-6490.dta

.
.
.
. ************************************use the first stata file "orbis_usa_2943-2950.dta"************
.
. use "`left1'", clear
(all firms from files Orbis_)

最终成功..

[em01][em01]

20
richardqmul 发表于 2008-5-22 17:17:00

我确实应该更努力的学习macro. 大家是怎么理解和运用以下三种macro形式?

 `a',  "`a'", 和 `"`a'"'

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

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