## 概要
`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形式データを整える]]