【问题标题】:Count occurrences across different columns with the same information计算具有相同信息的不同列中的出现次数
【发布时间】:2018-05-08 06:28:34
【问题描述】:

我有一个看起来像这样的数据集

ID S1 S2 S3 year
1  1  2     1999
1  1  2     2000
2  1        1999
2  1        2000
3  1        1999
3  2        2000
4  1  2  3  1999
4  3  1  2  2000
5  1  2     1999
5  1  3     2000

其中第一列是主题 ID,S1S3 是位置标识符,年份指的是 1999 年或 2000 年。我想计算一个主题在这两者中停留在同一位置的所有事件年(使用Stata)。也就是说,对于主题 1,这个值为 2,对于主题 2,它是 1,对于主题 3,它是 0,对于主题 4,它是 3,对于主题 5,它是 1。

【问题讨论】:

  • Spelling 已在 Stata 中使用了 >30 年。 Column 只是电子表格术语:对于 Stata,这些是变量。

标签: count stata


【解决方案1】:

我假设您的空格确实缺少数字。如果 S1 S2 S3 实际上是字符串并且空格是空字符串,这也应该有效。 1 2 3 和 3 1 2 等价的示例排除了在循环中仅计算 S1 S2 S3 上的相似性的各种更简单的解决方案。

clear 
input ID S1 S2 S3 year
1  1  2  .  1999
1  1  2  .  2000
2  1  .  .  1999
2  1  .  .  2000
3  1  .  .  1999
3  2  .  .  2000
4  1  2  3  1999
4  3  1  2  2000
5  1  2  .  1999
5  1  3  .  2000
end 

reshape long S, i(ID year) j(which) 
bysort ID (S) : gen count = sum(S == S[_n-1] & !missing(S)) 
by ID: replace count = count[_N] 
reshape wide S, i(ID year) j(which)  

list, sepby(ID) 

     +----------------------------------+
     | ID   year   S1   S2   S3   count |
     |----------------------------------|
  1. |  1   1999    1    2    .       2 |
  2. |  1   2000    1    2    .       2 |
     |----------------------------------|
  3. |  2   1999    1    .    .       1 |
  4. |  2   2000    1    .    .       1 |
     |----------------------------------|
  5. |  3   1999    1    .    .       0 |
  6. |  3   2000    2    .    .       0 |
     |----------------------------------|
  7. |  4   1999    1    2    3       3 |
  8. |  4   2000    3    1    2       3 |
     |----------------------------------|
  9. |  5   1999    1    2    .       1 |
 10. |  5   2000    1    3    .       1 |
     +----------------------------------+

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    相关资源
    最近更新 更多