Это немного сложно для подражания.
В вашем коде есть ссылка на 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
не заставляет вычисления игнорировать исключенные значения; это просто влияет на то, какие наблюдения игнорируются при получении не пропущенных значений. Рассмотрим этот эксперимент:
. 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
не такой общий метод подсчета, как вам нужно здесь.