使用与ID相对应的一堆信息设置数据,该ID可以多次显示。
ID Data
1 X
1 Y
2 A
2 B
2 Z
3 X
我想要一个循环来表示我正在查看的ID的哪个实例。这是第一次,第二次,等等?我想将它作为_#
形式的字符串,所以我必须超越Stata中的简单_n
函数,据我所知。如果有人知道如何在没有循环的情况下做我想做的事情让我知道,但我仍然会喜欢这个答案。
我在Stata中有以下循环
by ID: gen count_one = _n
gen count_two = ""
quietly forval j = 1/3 {
replace count_two = "_`j'" if count_one == `j'
}
输出现在看起来像这样:
ID Data count_one count_two
1 X 1 _1
1 Y 2 _2
2 A 1 _1
2 B 2 _2
2 Z 3 _3
3 X 1 _1
问题是如何替换上面的16
以告诉Stata采用count_one列的最大值,因为我需要每周运行一次,并且max会改变,我想减少错误。
答案 0 :(得分:2)
很难理解为什么要这样,但无论你想要数字还是字符串都是一行:
bysort ID : gen nummax = _N
bysort ID : gen strmax = "_" + string(_N)
请注意,ID
中的排序顺序与每个的观察数量无关。
答案 1 :(得分:1)
你问题的某些部分不清楚(“......替换上面的16
告诉Stata ......”)但是:
为什么不将_n
与tostring
一起使用?
gsort +ID +data
bys ID: g count_one=_n
tostring count_one, gen(count_two)
replace count_two="_"+count_two
然后生成最大值(在那里回答部分问题) - 尽管注意这个值将在每个ID值的实例之间重复:
bys ID: egen maxcount1=max(count_one)
或更优雅:
bys ID: g maxcount2=_N