Stata:使用循环来保持和重塑变量子集
原始数据。我的数据集的文件约有281.000列,我需要将这些列传输到Stata并进行重塑。按照对我以前文章的回复的建议,我尝试使用insheet命令,拆分和重塑数据块并附加它们。我的代码的当前“玩具”版本如下所示:Stata:使用循环来保持和重塑变量子集,stata,Stata,原始数据。我的数据集的文件约有281.000列,我需要将这些列传输到Stata并进行重塑。按照对我以前文章的回复的建议,我尝试使用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 sav
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) 它只附加第一个和第三个数据子集,而忽略第二个数据子集。对此有何解释?我怀疑这可能与导入原始数据时使用insheet
与use
有关,但我无法找到解决方法
2) 由于真实数据集包含281000个变量,我想知道是否有一种方法可以自动化这个过程(即创建一个循环,以保持和重塑每10000个变量,然后是下10000个变量等等),有人知道这在Stata中是否可行吗?第1期。 当您调用-append时,内存中已经有了数据集'3',因此您正在将'1'追加到'3'。你漏掉了'2' 试一试 第2期。 完全可行。看看-foreach-和-forvalues-。比如说跑步
help foreach
去看Stata的帮助
更多
我认为您可以在-keep-之后再进行-reforme-来缩短代码。例如:
<snip>
use `orig', clear
keep simulation v13-v22
reshape long v, i(simulation) j(_count)
save `2'
<snip>
使用'orig',清除
保持模拟v13-v22
重塑长v,i(模拟)j(_计数)
保存'2'
<snip>
use `orig', clear
keep simulation v13-v22
reshape long v, i(simulation) j(_count)
save `2'
<snip>