1

数据是由一组与 ID 对应的信息设置的,可以多次显示。

ID          Data
 1            X
 1            Y
 2            A
 2            B
 2            Z
 3            X

我想要一个循环来表示我正在查看的 ID 的哪个实例。是第一次,第二次,等等?我希望它作为表单中的字符串,_#因此据我所知,我必须超越_nStata 中的简单函数。如果有人知道在没有循环的情况下做我想做的事的方法,请告诉我,但我仍然希望得到答案。

我在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 列的最大值,因为我需要每周运行一次,并且最大值会改变,我想减少错误。

4

2 回答 2

2

很难理解你为什么想要这个,但无论你想要数字还是字符串,它都是一行:

bysort ID : gen nummax = _N 

bysort ID : gen strmax = "_" + string(_N) 

请注意,其中的排序顺序ID与每个观察值的数量无关。

于 2013-10-01T07:30:36.410 回答
1

您的问题的某些部分不清楚(“...将16上面的内容替换为告诉Stata ...”)但是:

你为什么不直接使用_nwith 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
于 2013-10-01T04:58:43.067 回答