Stata:减少基于年度数据的观察

Stata: Reducing observations based on yearly data

如果公司(下面的 companyid)每年 "multicolor",我想创建一个变量,该变量为 1 或 0。以下是我的数据:

* Example generated by -dataex-. To install: ssc install dataex
clear
input str6 companyid int year float(red blue green)
"001045" 2015 0 1 0
"001045" 2015 0 1 0
"001045" 2015 0 1 0
"001045" 2015 0 1 0
"001045" 2017 1 0 0
"001045" 2017 1 0 0

"001049" 2019 0 1 0
"001049" 2019 0 0 1

"001055" 2018 1 0 0
"001055" 2018 0 1 0
"001055" 2018 0 0 1

例如,公司 #001055 在 2018 年是红色、蓝色和绿色,所以这个 'multicolor' 变量应该等于 1。

此外,我还想为不同的组合创建变量。 IE。 a red-blue var = 1 如果一家公司每年都是红色和蓝色 = 1。

我试图用 bysort companyid year: gen multicolor = 1 if red == 1 & blue == 1 & green == 1 做点什么,但我意识到我想要完成的事情还有很多缺失。

总体目标是减少多年观察,因此我每年对每个公司进行一次观察。

这条 year/company 记录将包含该公司是否为红色、绿色、蓝色或这些颜色的确切混合(如果混合)的信息。下面是我想从上面的数据创建的数据示例。

input str6 companyid int year float(red blue green r-b-g red-blue blue-green ...more...)
"001045" 2015 0 1 0 0 0 0 ...
"001045" 2017 1 0 0 0 0 0 ...
"001049" 2019 0 0 0 0 0 1 ...
"001055" 2018 0 0 0 1 0 0 ...

我认为这比您担心的要容易得多。首先,collapse 到公司和年份的最大值。然后你有 red blue green 的个人价值。其次,连接值,以便 "110" 是红色和蓝色而不是绿色,依此类推。

tabulate 将生成与数据中找到的组合对应的所有指标。

实际上,3种颜色和2种可能性允许二进制编码,字符串也是二进制数。

true 1 和 false 0 的对应关系,最大超过 0s 和 1s 意味着 "any",最小超过 0s 和 1s 意味着 "all" 一旦理解就很明显,但值得解释。对于 Stata 上下文,请参阅 this FAQ

clear
input str6 companyid int year float(red blue green)
"001045" 2015 0 1 0
"001045" 2015 0 1 0
"001045" 2015 0 1 0
"001045" 2015 0 1 0
"001045" 2017 1 0 0
"001045" 2017 1 0 0
"001049" 2019 0 1 0
"001049" 2019 0 0 1
"001055" 2018 1 0 0
"001055" 2018 0 1 0
"001055" 2018 0 0 1
end 

collapse (max) red blue green, by(companyid year) 

egen colors = concat(red blue green)

list

     +-----------------------------------------------+
     | compan~d   year   red   blue   green   colors |
     |-----------------------------------------------|
  1. |   001045   2015     0      1       0      010 |
  2. |   001045   2017     1      0       0      100 |
  3. |   001049   2019     0      1       1      011 |
  4. |   001055   2018     1      1       1      111 |
     +-----------------------------------------------+