Stata 观测值重新对照

Stata 观测值重新对照

这个是一个小伙伴在问答群里面提出的问题:

在Stata里面 有firm-sales这样的数据结构,如何把sales的值打乱,重新随机分配给每个firm呢?

这位小伙伴还用 dataex 生成了一个示例数据集:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[CODE]
* Example generated by -dataex-. To install: ssc install dataex
clear
input float(firm year sales)
1 2001 100
2 2003 200
3 2002 300
4 2003 80
5 2003 70
6 2003 100
7 2003 700
1 2002 200
2 2002 300
3 2002 400
4 2002 900
5 2002 10000
end
[/CODE]

我给这个问题提出的解决方法是:

生成一个新的 scales 变量 new_scales 和均匀分布的随机数变量 idx,然后 new_scales 的每个观测值等于 scales[idx]

具体怎么实现呢?

首先我们运行下上面的示例代码生成一个示例数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
clear
input float(firm year sales)
1 2001 100
2 2003 200
3 2002 300
4 2003 80
5 2003 70
6 2003 100
7 2003 700
1 2002 200
2 2002 300
3 2002 400
4 2002 900
5 2002 10000
end

我的回答用代码表示就是:

1
2
3
gen new_sales = .
gen idx = runiformint(1, 12)
replace new_sales = sales[idx]

但是这样可能不符合这位同学的需要,因为直接生成的随机数可能会有重复的(随机数生成是有放回的)。那怎么实现不放回的呢?我又想到了如下方法:

1
2
3
4
5
6
keep firm year sales
gen idx1 = _n
gen new_sales = .
gen idx = runiformint(1, 12) + _n
gsort idx
replace new_sales = sales[idx1]

首先我生成了一个 idx1 变量记录数据的原始顺序,然后我又生成了一个 idx 变量,其值为一个 runiformint(1, 12) + _n 其中 _n 表示“第几个观测值”,再按照 idx 进行排序,最后我们设定 new_sales = sales[idx1],这样不就实现了无放回的变量重排了。

#

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×