@ Ник опередил меня на пару минут, но вот еще один способ сделать это:
clear
input foo
35
35
37
37
37
40
end
egen counter = group(foo)
list
+---------------+
| foo counter |
|---------------|
1. | 35 1 |
2. | 35 1 |
3. | 37 2 |
4. | 37 2 |
5. | 37 2 |
|---------------|
6. | 40 3 |
+---------------+
В этом подходе используется команда egen
и связанная с ней функция group()
.
Есть также несколько опций для этой функции, причем missing
является, пожалуй, наиболее полезным.
Из файла справки команды:
"... отсутствует указывает на то, что при назначении групп пропущенные значения в varlist (либо., Либо" ") должны обрабатываться как любое другое значение, а не как пропущенные значения, назначаемые группе, пропущенной ... «
clear
input foo
35
35
.
37
37
37
40
.
end
egen counter = group(foo), missing
sort foo
list
+---------------+
| foo counter |
|---------------|
1. | 35 1 |
2. | 35 1 |
3. | 37 2 |
4. | 37 2 |
5. | 37 2 |
|---------------|
6. | 40 3 |
7. | . 4 |
8. | . 4 |
+---------------+
Вместо:
drop counter
egen counter = group(foo)
sort foo
list
+---------------+
| foo counter |
|---------------|
1. | 35 1 |
2. | 35 1 |
3. | 37 2 |
4. | 37 2 |
5. | 37 2 |
|---------------|
6. | 40 3 |
7. | . . |
8. | . . |
+---------------+
Другой вариант: label
:
"... Опция label возвращает целые числа от 1 до в соответствии с различными группами varlist в отсортированном порядке. Целые числа помечаются значениями varlist или метками значений, если они существуют ..."
Используя пример без пропущенных значений:
egen counter = group(foo), label
list
+---------------+
| foo counter |
|---------------|
1. | 35 35 |
2. | 35 35 |
3. | 37 37 |
4. | 37 37 |
5. | 37 37 |
|---------------|
6. | 40 40 |
+---------------+