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 != 0
和 bysort 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
并不是您在这里需要的通用计数方法。
我正在尝试按公司 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 != 0
和 bysort 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
并不是您在这里需要的通用计数方法。