stata - 如果在另一个变量中找到新值,则创建一个递增 1 的变量
问题描述
我有以下(排序的)变量:
35
35
37
37
37
40
我想创建一个新变量,当原始变量中出现新数字时,该变量将增加一。
例如:
35 1
35 1
37 2
37 2
37 2
40 3
我考虑过使用by
orbysort
命令,但似乎没有一个能解决问题。这看起来像很多人需要的东西,但我找不到答案。
解决方案
@Nick 让我领先了几分钟,但这是另一种更清洁的方法:
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
可能是最有用的。
从命令的帮助文件:
“...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 选项根据 varlist 的不同组按排序顺序返回从 1 开始的整数。整数用 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 |
+---------------+
推荐阅读
- office365 - 我们可以使用一个 zap 为“n”个 Office 365 帐户创建事件吗?(Zapier-Office365)
- c++ - 为 Web 项目编译 gnu cgi 时出现编译错误
- javascript - 使用 Axios 抓取后如何将对象推送到 JSON 文件?
- c++ - std::make_pair 自动类型推断?
- benchmarking - 英特尔超路径互连 (UPI) 带宽
- python - 如何在 discord.py 中修复以下自动反应角色代码?
- github - 如何找到星数最多的分叉存储库
- powershell - 如何从 HtmlWebResponseObject 解析 JSON
- python - 如何使用来自 Pandas DataFrame 的值更新 DynamoDB 列,使用 ID 作为公共值
- amazon-web-services - 通过 aws Education 帐户为 IAMUSER 创建访问令牌的问题