Stata:给定其他变量条件的变量总和

Stata: sum of variable given other variable conditions

我正在尝试按公司 ID 和年份生成不同的 'total count' 变量。

一个 'total count' 用于订阅,一个总计用于贷款。

基本上我在尝试扩展这个问题:

* Example generated by -dataex-. To install: ssc install dataex
clear
input str6 companyid int year float sub_num double sub_amt float(sub_year_total loan_num) double loan_amt float loan_year_total
"001004" 1999  .        0   425000  .       0       0
"001004" 1999  2   425000   425000  .       0       0
"001004" 2004  .        0        0  .       0       0
"001004" 2005  1  4232000  4232000  .       0       0
"001004" 2006  1 16000000 1.60e+07  .       0       0
"001004" 2007  3    58354   182444  .       0       0
"001078" 2006  .        0   471529  .       0       0
"001078" 2006  .        0   471529  .       0       0
"001078" 2006  .        0   471529  .       0       0
"001078" 2006  6    29872   471529  .       0       0
"001078" 2006  6    59748   471529  .       0       0
"001078" 2006  6   381909   471529  .       0       0
"001078" 2007  .        0   768825  7  270000 2580000
"001078" 2007  .        0   768825  7  360000 2580000
"001078" 2007  .        0   768825  7 1500000 2580000
"001078" 2007  .        0   768825  7  450000 2580000
"001078" 2007  .        0   768825  .       0 2580000
"001078" 2007  7   359454   768825  .       0 2580000
"001078" 2007  7   409371   768825  .       0 2580000
"001078" 2008  .        0  1751832  5  450000 2450000
"001078" 2008  .        0  1751832  5 2000000 2450000
"001078" 2008  5    47957  1751832  .       0 2450000
"001078" 2008  5   485631  1751832  .       0 2450000
"001078" 2008  5  1218244  1751832  .       0 2450000
end

注意:如果 sub_num = 0 那么 loan_num != 0,反之亦然。

我试过了bysort cik year: gen sub_num = _N if loan_amt != 0bysort cik year loan_amt: gen sub_num = _N 但两者都不是。我在示例中留下了失败的计数变量以供参考。

即公司 #001078 在 2007 年会有 loan_num = 4 和 sub_num = 2

我刚刚注意到这个例子有一个观察结果,两者都为 0,我可以删除两者都为 0 的条目,因此无需对此发表评论。

如何为我的 'sub' 和 'loan' 变量制作公司年度总计数?

我想我找到了解决方法:

gen lc = 0
replace lc = 1 if loan_sum != 0
bysort cik year lc: gen lcount = _N if lc != 0

然后对其他变量做同样的事情。

这有点难以理解。

  • 您的代码中有对 cik 的引用,但它不在您的数据示例中。

  • 很难知道什么是原始数据以及您尝试计算的结果是什么。

  • 这个例子似乎比必要的更复杂。

  • 虽然标题指的是金额,但也很明显你对计算某些种类的贷款感兴趣。

计数是指标的总和,所以这显示了一些技巧而不一定是答案。向 egen, total() 提供一个 true-or-false 表达式,结果将是表达式为真的观察次数 (1);为假 (0) 的参数将被忽略,因为它们对总和没有影响。

bysort companyid year : egen wanted1 = total(loan_amt > 0)

bysort companyid year : egen wanted2 = total(loan_amt > 0 & sub_num < .)

_N 只是观察次数,有时以其他变量为条件。您自然可以将该数字分配给变量,但指定 if 限定符不会使计算忽略排除的值;它只会影响在接收 non-missing 值时忽略哪些观察值。考虑这个实验:

. clear

. set obs 1000
number of observations (_N) was 0, now 1,000

. gen count = _N if _n == 1
(999 missing values generated)

. l count in 1

     +-------+
     | count |
     |-------|
  1. |  1000 |
     +-------+

换句话说,_N 并不是您在这里需要的通用计数方法。