新しい変数を生成するために2つの異なるコマンドがある理由はありますか?
gen
をいつ使用し、egen
をいつ使用するかを覚えておく簡単な方法はありますか?
どちらも新しい変数を作成しますが、関数の異なるセットで動作します。次のようにデータセット内の他の変数を単純に変換する場合、通常はgen
を使用します
gen newvar = oldvar1^2 * oldvar2
私のワークフローでは、egen
は通常、次のようにすべての観測で機能する関数が必要な場合に表示されます
egen max_var = max(var)
またはより複雑な指示
egen newvar = rowmax(oldvar1 oldvar2)
oldvar1
とoldvar2
の間の各観測の最大値を計算します。 2つのコマンドを分離するための明確なロジックはないと思います。
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)は小数点第1位に丸められます)sqrt(x)
xの平方根runiform()
は、0から1に近い均一に分散された数値を返しますrnormal()
は、標準正規分布に従う数値を返しますrnormal(x,y)
は、xの平均とs.dの正規分布に従う数値を返します。 yの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)
詳しい使用法の説明は、この link にあります。