在Stata中为给定的一组命令设置样本

时间:2016-06-17 10:09:38

标签: stata

我正在运行几个命令块,其中每个块与数据集的特定子样本相关。每个块中的代码都有所不同,因此我无法对所有子样本运行for循环。此外,代码块被连接(一些块输出作为输入馈送到其他块),所以我不能只运行分离的do文件。

目前,我在每个命令中使用条件if sample == i运行do文件(其中sample的值表示数据集的子样本)。然而,这是耗时且不太优雅的。我正在寻找一个像:

这样的命令
set sample = 1
code 
code 
code 
set sample = 2
code
code
set sample = 3
code
code

到目前为止,我还没有发现任何Stata命令/扩展允许我这样做。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

如果您使用优秀的文本编辑器在逗号之前或行尾快速插入if exp,我认为这样的事情会更容易。

但是,您可以像这样在线定义迷你程序:

sysuse auto, clear

capture program drop block1
program define block1
syntax if
regress price mpg `if'
sum `if'
end
block1 if foreign==0
block1 if foreign==1    

capture program drop block2
program define block2
syntax if
tw hist price `if'
scatter price weight `if'
end

block2 if if price > 2000
block2 if foreign==1

答案 1 :(得分:1)

另一种接近此方法的方法可能是使用preserve和restore命令。您的代码如下:

preserve
keep if x==1
code
code
code
restore
preserve
keep if x==2
code
...

就个人而言,我认为这使代码易于遵循,但缺点是速度/效率,因为Stata正在创建临时文件,然后重新加载原始数据。因此,如果您在保留和恢复步骤之间执行大量命令,我只会使用它。