1

原始数据。我的数据集文件有 ~281.000 列,我需要将其传输到 Stata 并重塑。根据作为对我以前帖子的回复发布的关于 SO 的建议,我正在尝试使用 insheet 命令,拆分和重塑数据块并附加它们。我的代码的当前“玩具”版本如下所示:

insheet using "D:\Trial_Import\products_4_3_2.dat", comma clear
// extract vars

tempfile orig 1 2 3 

save `orig'

keep simulation v2-v12
save `1'

use `orig'
keep simulation v13-v22
save `2'

use `orig'
keep simulation v23-v33
save `3'

// reshape 

use `1'
reshape long v, i(simulation) j(_count)
save `1', replace

use `2'
reshape long v, i(simulation) j(_count)
save `2', replace

use `3'
reshape long v, i(simulation) j(_count)
save `3', replace


append using `1'

代码有两个问题:

1) 它只附加第一个和第三个数据子集,而忽略第二个。对此有何解释?我怀疑它可能与在导入原始数据时使用insheetvs.use有关,但我无法弄清楚修复它的方法。

2)由于真实的数据集包含 281,000 个变量,我想知道是否有办法使这个过程自动化(即创建一个循环以保持和重塑每个 10000 个变量,然后是下一个 10000 个等……)有谁知道在Stata中可行吗?

4

1 回答 1

2

问题 1。

当您调用 -append- 时,您在内存数据集“3”中已有数据,因此您将“1”附加到“3”。你漏掉了“2”。

尝试

append using `1' `2'

问题 2。

完全可行。看看 -foreach- 和 -forvalues-。运行,例如

help foreach

查看Stata帮助。

更多的

我认为你可以在 -keep- 之后做 -reshape- 来缩短你的代码。例如:

<snip>
use `orig', clear
keep simulation v13-v22
reshape long v, i(simulation) j(_count)
save `2'
<snip>
于 2013-10-14T00:43:22.070 回答