什么';gen和egen在Stata 12中的区别是什么?

什么';gen和egen在Stata 12中的区别是什么?,stata,Stata,有两个不同的命令生成新变量的原因吗 是否有一种简单的方法可以记住何时使用gen以及何时使用egen?它们都创建了一个新变量,但使用不同的函数集。当您对数据集中的其他变量进行简单转换时,通常会使用gen,例如 gen newvar = oldvar1^2 * oldvar2 在我的工作流程中,egen通常在我需要跨所有观察值工作的函数时出现,如 egen max_var = max(var) 或更复杂的指令 egen newvar = rowmax(oldvar1 oldvar2) 计算ol

有两个不同的命令生成新变量的原因吗


是否有一种简单的方法可以记住何时使用
gen
以及何时使用
egen

它们都创建了一个新变量,但使用不同的函数集。当您对数据集中的其他变量进行简单转换时,通常会使用
gen
,例如

gen newvar = oldvar1^2 * oldvar2
在我的工作流程中,
egen
通常在我需要跨所有观察值工作的函数时出现,如

egen max_var = max(var)
或更复杂的指令

egen newvar = rowmax(oldvar1 oldvar2)
计算
oldvar1
oldvar2
之间每次观察的最大值。我认为没有明确的逻辑来区分这两个命令。

gen
generate
可以缩写为
gen
甚至
g
,可以与以下数学运算符和函数一起使用:

  • +
    添加
  • -
    减法
  • *
    乘法
  • /
    分部
  • ^
    电源
有大量的功能可用。以下是一些例子:

  • abs(x)
    x的绝对值
  • exp(x)
    x的反对数
  • int(x)或trunc(x)
    截断为整数值
  • ln(x),log(x)
    x的自然对数
  • 四舍五入(x)
    四舍五入到最接近的x整数
  • 四舍五入(x,y)
    x以y为单位四舍五入(即四舍五入(x,.1)四舍五入到小数点后一位)
  • sqrt(x)
    x的平方根
  • runiform()
    返回0到1之间均匀分布的数字
  • rnormal()
    返回遵循标准正态分布的数字
  • r正态(x,y)
    返回的数字服从正态分布,平均值为x,标准差为y
egen
egen
命令中实现了许多更复杂的可能性,如以下示例所示:

  • egen nkids=anycount(pers1 pers2 pers3 pers4 pers5),值(1)
  • egen v323r=rank(v323)
  • egen myindex=rowmean(var15 var17 var18 var20 var23)
  • egen nmiss=rowmiss(x1-x10 var15-var23)
  • egen nmiss=rowtotal(x1-x10 var15-var23)
  • egen incomst=std(收入)
  • bysort v3:egen mincome=平均值(收入)

详细的用法说明可以在这里找到。

实际上,有一个非常清晰的逻辑。如果可以使用现有的数学函数完成任务,则使用
generate
。如果这是一个更复杂的问题,例如需要对一组观察结果进行处理(在Stata中不容易解决),则需要寻找合适的
egen
函数。同意。但我仍然看不到有两个独立命令的逻辑。我认为Stata的逻辑非常清楚:
egen
gen
不使用时使用:)@griverorz,实现上存在差异<代码>生成是一个快速的内部命令<代码>egen正在由Stata解析,您可以使用Stata ado代码为其编写扩展。使用
generate
无法执行此操作。与R相比,这是80年代留下的一个相当痛苦的遗产,在R中,您可以内联定义一个函数,并在使用后将其忘记。StasK是正确的。从技术上讲,
egen
是对
egen
命令的“扩展”,因为它超越了简单的计算(
var1+var2
log(var1)
等),可以添加描述性统计、标准化等。因此,在R中使用
plyr
apply
可以完成的一些工作是使用Stata中的
statsby
egen
完成的。我用它轻轻地修改置信区间和散点图。