Stata 同时使用egen和对变量排序

Stata 同时使用egen和对变量排序,stata,data-manipulation,Stata,Data Manipulation,在上一篇文章中,我得到了一个有效的解决方案,可以生成一个变量,同时对其进行排序: sysuse auto, clear generate random = runiform(), before(make) 如果使用egen命令,此解决方案似乎不起作用: egen avgprice = mean(price), before(make) option before() not allowed r(198); 当使用egen时,是否可以生成一个变量并同时对其排序?该egen命令没有类似于gene

在上一篇文章中,我得到了一个有效的解决方案,可以生成一个变量,同时对其进行排序:

sysuse auto, clear
generate random = runiform(), before(make)
如果使用
egen
命令,此解决方案似乎不起作用:

egen avgprice = mean(price), before(make)
option before() not allowed
r(198);

当使用
egen
时,是否可以生成一个变量并同时对其排序?

egen
命令没有类似于
generate
before()
选项

但是,您可以通过编写一个小程序来完成您想要的:

program define egen2

unab allvars : *
gettoken firstvar : allvars

tempname var
gettoken firstarg 0 : 0, parse("=")

egen `var' `0'
generate `firstarg' = `var', before(`firstvar')

end
然后,您可以执行以下操作:

sysuse auto, clear

egen2 foo = mean(price)
编辑:

如果您不想完全避免
订单
,则可将程序缩减为以下内容:

program define egen2

gettoken firstarg 0 : 0, parse("=")
egen `firstarg' `0'
order `firstarg'

end

egen
命令没有类似于
generate
before()
选项的选项

但是,您可以通过编写一个小程序来完成您想要的:

program define egen2

unab allvars : *
gettoken firstvar : allvars

tempname var
gettoken firstarg 0 : 0, parse("=")

egen `var' `0'
generate `firstarg' = `var', before(`firstvar')

end
然后,您可以执行以下操作:

sysuse auto, clear

egen2 foo = mean(price)
编辑:

如果您不想完全避免
订单
,则可将程序缩减为以下内容:

program define egen2

gettoken firstarg 0 : 0, parse("=")
egen `firstarg' `0'
order `firstarg'

end

对我来说,不清楚为什么必须避免使用
order
,而这个命令确实可以很好地直接(并且没有任何意外的副作用)达到所需的输出。我同意@romalpakzo,我在这里避免使用
order
,因为OP说使用这个命令是不可取的(无论出于何种原因,我都不明白).为了便于说明,我现在修改了我的答案,加入了一个基于
order
的解决方案。我没有说使用
order
是不可取的。我的观点是,我希望避免每次创建变量时都使用
order
。通过
egen2
程序自动执行此过程非常棒!您必须我可以用任何一种方法计算变量的位置,所以想要避免它和它不受欢迎之间的距离对我来说也很短。在最初的问题上,从帮助中或通过查看代码可以清楚地看出,
egen
不支持这一点。有一个问题是为什么不支持,这是针对StataCorp的,但有很多逗号nds生成变量,但不提供指定变量去向的选项。作为一名程序员,您可以克隆现有命令并添加这样的选项,正如@PearlySpencer的回答所表明的那样。@emeryville避免使用
order
和自动对变量排序是不同的事情。至少在我看来。我很高兴这是r不过我还是很满意。对我来说,不清楚为什么必须避免使用
order
,而这个命令确实可以很好地直接(并且没有任何意外的副作用)达到所需的输出。我同意@romalpakzo,我在这里避免使用
order
,因为OP说使用这个命令是不可取的(无论出于何种原因,我都不明白).为了便于说明,我现在修改了我的答案,加入了一个基于
order
的解决方案。我没有说使用
order
是不可取的。我的观点是,我希望避免每次创建变量时都使用
order
。通过
egen2
程序自动执行此过程非常棒!您必须我可以用任何一种方法计算变量的位置,所以想要避免它和它不受欢迎之间的距离对我来说也很短。在最初的问题上,从帮助中或通过查看代码可以清楚地看出,
egen
不支持这一点。有一个问题是为什么不支持,这是针对StataCorp的,但有很多逗号nds生成变量,但不提供指定变量去向的选项。作为一名程序员,您可以克隆现有命令并添加这样的选项,正如@PearlySpencer的回答所表明的那样。@emeryville避免使用
order
和自动对变量排序是不同的事情。至少在我看来。我很高兴这是r不过我还是让你满意了。