Есть ли причина, по которой существуют две разные команды для создания новой переменной?
Есть ли простой способ запомнить, когда использовать gen
, а когда egen
?
Есть ли причина, по которой существуют две разные команды для создания новой переменной?
Есть ли простой способ запомнить, когда использовать gen
, а когда egen
?
Оба они создают новую переменную, но работают с разными наборами функций. Обычно вы будете использовать gen
, когда у вас есть простые преобразования других переменных в вашем наборе данных, например
gen newvar = oldvar1^2 * oldvar2
В моем рабочем процессе egen
обычно появляется, когда мне нужны функции, которые работают со всеми наблюдениями, как в
egen max_var = max(var)
или более сложные инструкции
egen newvar = rowmax(oldvar1 oldvar2)
чтобы вычислить максимум для каждого наблюдения между oldvar1
и oldvar2
. Я не думаю, что есть четкая логика для разделения двух команд.
generate
. Если это что-то более сложное, например. необходимо выполнить для групп наблюдений (которые не очень легко обработать в Stata), вам нужно будет найти подходящую функцию egen
.
- person StasK; 21.10.2012
egen
используется всякий раз, когда gen
нет :)
- person max; 21.10.2012
generate
— быстрая внутренняя команда. egen
анализируется Stata, и вы можете писать к нему расширения, используя ado-код Stata. Вы не можете сделать это с generate
. Это довольно болезненное наследие 80-х по сравнению с R, где вы можете определить встроенную функцию и забыть о ней после того, как она была использована.
- person StasK; 21.10.2012
egen
является расширением команды egen
, потому что она выходит за рамки простых вычислений (var1 + var2
, log(var1)
и т. д.) и добавляет описательную статистику, стандартизацию и многое другое. Поэтому некоторые вещи, которые можно сделать с помощью plyr
и apply
в R, выполняются с помощью statsby
и egen
в Stata. Я использую его, чтобы осторожно взламывать доверительные интервалы и диаграммы рассеяния.
- person Fr.; 21.10.2012
gen
generate
может быть сокращено до gen
или даже g
и может использоваться со следующими математическими операторами и функциями:
+
дополнение-
вычитание*
умножение/
дивизия^
мощностьДоступно большое количество функций. Вот некоторые примеры:
abs(x)
абсолютное значение xexp(x)
антилог xint(x) or trunc(x)
усечение до целочисленного значенияln(x), log(x)
натуральный логарифм xround(x)
округляет до ближайшего целого числа xround(x,y)
x округляется в единицах y (т. е. round(x,.1) округляется до одного десятичного знака)sqrt(x)
квадратный корень из xruniform()
возвращает равномерно распределенные числа от 0 до почти 1rnormal()
возвращает числа, соответствующие стандартному нормальному распределению.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)
Подробные пояснения по использованию можно найти по этой ссылке.