2

ここで役立つと思いますegenが、何らかの理由で正しい構文を理解できません。グループ内の観測値のいずれかで X が true の場合、グループ内のすべての観測値に対して 1 の値を取る新しい変数を作成したいと考えています。たとえば、私のデータにはobsgroup、およびflag変数があり、変数 を生成したいとしますgrpflag

obs    group  flag    grpflag
1      1      0       1
2      1      1       1
3      1      0       1
4      2      0       0
5      2      0       0
6      2      0       0
7      3      1       1
8      3      0       1

したがって、例のデータでは、グループ 1 の観測値flag==1の 1 つ (つまり、いずれか) について、グループ 1 のすべての観測値に対して値 1 を取得したいgrpflagと考えています。グループ 3 についても同じことが当てはまり、グループ 3 についてはその逆が当てはまります。グループ 2。

4

1 に答える 1

3

あなたは正しかった:egenコマンドはこれを行うことができます。

egen grpflag = max(flag), by(group) 

Stataで利用されている any:maximum と all:minimum の対応の詳細については、Stata FAQ http://www.stata.com/support/faqs/data-management/create-variable-recording/を参照してください。

あなたの例は簡単ですが(flagすでに 0 または 1 であるため、max()に直接適用できますflag)、 の引数はmax()式にすることができるため、構文はより一般的なケース、たとえばmax(foo == 42).

egen利用できない、またはこのように機能しなかった場合でも、この種のワンライナーは Stata で可能であり、呼び出すよりも効率的egenです。

bysort group (flag) : gen grpflag = flag[_N] 

ただし、これは の欠落によってスローされるflagため、回避する必要があります。次に、それはただの可能性があります

gen isflag = flag == 1 
bysort group (isflag) : gen grpflag = isflag[_N] 

一般的な原則は、並べ替え対象が 0 と 1 である限り、1 の値は観測の各ブロック内で最後まで並べ替えられるということです。

于 2013-10-31T02:17:09.903 に答える