В чем разница между gen и egen в Stata 12?

Есть ли причина, по которой существуют две разные команды для создания новой переменной?

Есть ли простой способ запомнить, когда использовать gen, а когда egen?


person max    schedule 20.10.2012    source источник


Ответы (2)


Оба они создают новую переменную, но работают с разными наборами функций. Обычно вы будете использовать gen, когда у вас есть простые преобразования других переменных в вашем наборе данных, например

gen newvar = oldvar1^2 * oldvar2

В моем рабочем процессе egen обычно появляется, когда мне нужны функции, которые работают со всеми наблюдениями, как в

egen max_var = max(var)

или более сложные инструкции

egen newvar = rowmax(oldvar1 oldvar2)

чтобы вычислить максимум для каждого наблюдения между oldvar1 и oldvar2. Я не думаю, что есть четкая логика для разделения двух команд.

person griverorz    schedule 20.10.2012
comment
На самом деле тут довольно четкая логика. Если задачу можно выполнить с помощью существующих математических функций, вы используете generate. Если это что-то более сложное, например. необходимо выполнить для групп наблюдений (которые не очень легко обработать в Stata), вам нужно будет найти подходящую функцию egen. - person StasK; 21.10.2012
comment
Согласен. Но я все еще не вижу логики наличия двух отдельных команд. - person griverorz; 21.10.2012
comment
Я думаю, что логика Stata очень ясна: egen используется всякий раз, когда gen нет :) - person max; 21.10.2012
comment
@griverorz, есть различия в реализации. generate — быстрая внутренняя команда. egen анализируется Stata, и вы можете писать к нему расширения, используя ado-код Stata. Вы не можете сделать это с generate. Это довольно болезненное наследие 80-х по сравнению с R, где вы можете определить встроенную функцию и забыть о ней после того, как она была использована. - person StasK; 21.10.2012
comment
Стас прав. Технически egen является расширением команды egen, потому что она выходит за рамки простых вычислений (var1 + var2, log(var1) и т. д.) и добавляет описательную статистику, стандартизацию и многое другое. Поэтому некоторые вещи, которые можно сделать с помощью plyr и apply в R, выполняются с помощью statsby и egen в Stata. Я использую его, чтобы осторожно взламывать доверительные интервалы и диаграммы рассеяния. - person Fr.; 21.10.2012

gen

generate может быть сокращено до gen или даже g и может использоваться со следующими математическими операторами и функциями:

  • + дополнение
  • - вычитание
  • * умножение
  • / дивизия
  • ^ мощность

Доступно большое количество функций. Вот некоторые примеры:

  • abs(x) абсолютное значение x
  • exp(x) антилог x
  • int(x) or trunc(x) усечение до целочисленного значения
  • ln(x), log(x) натуральный логарифм x
  • round(x) округляет до ближайшего целого числа x
  • round(x,y) x округляется в единицах y (т. е. round(x,.1) округляется до одного десятичного знака)
  • sqrt(x)квадратный корень из x
  • runiform() возвращает равномерно распределенные числа от 0 до почти 1
  • rnormal() возвращает числа, соответствующие стандартному нормальному распределению.
  • rnormal(x,y) возвращает числа, которые следуют нормальному распределению со средним значением x и sd. из у

egen

В команде egen реализован ряд более сложных возможностей, как в следующих примерах:

  • egen nkids = anycount(pers1 pers2 pers3 pers4 pers5), value(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(income)
  • bysort v3: egen mincome = mean(income)

Подробные пояснения по использованию можно найти по этой ссылке.

person GorkemHalulu    schedule 17.06.2018