## 概要 `egen ... = tag(グループ変数)` は、グループごとに 1 行だけ 1 を立てる関数です。`if` を付けると、条件を満たす行だけを見て各グループの最初の 1 行に印を付けられます。欠測などを除いて「最初に条件を満たした行」を拾うときに使います。 ## 最小例 `x` が 1 の行だけを対象にして、id ごとの最初の行に印を付けます。 ```stata clear all input id x 1 1 1 0 1 1 2 0 2 1 end egen t_all = tag(id) // if なし egen t_if = tag(id) if x==1 // x==1 の行だけ対象 list, noobs abbreviate(16) ``` ``` +-----------------------+ | id x t_all t_if | |-----------------------| | 1 1 1 1 | | 1 0 0 0 | | 1 1 0 0 | | 2 0 1 0 | | 2 1 0 1 | +-----------------------+ ``` `t_all`(if なし)は各 id の物理的な最初の行に 1 が立ちます(id 2 は x=0 の行でも 1)。`t_if`(if あり)は x==1 の行だけを見るので、id 2 では x==1 の 2 行目に 1 が立ちます。 ## 条件外の行は 0 になる `if` の条件を満たさない行は、欠測(`.`)ではなく 0 になります。上の `t_if` でも、x==0 の行は `.` ではなく 0 です。したがって「1 が立っている行」だけが各グループの最初の対象行で、0 の行(条件を満たす 2 行目以降と、条件を満たさない行)はまとめて対象外になります。 ## 使いどころ [[Stata - MMRM用のlong形式データを整える]] では、`tag(id) if has_egfr==1` として欠測を除き、各人の最初に実測できた行を baseline に選んでいます。 ## Reference - [[Stata - 同じIDの最初の行だけを取り出す]] - [[Stata - MMRM用のlong形式データを整える]]