Stata: сумма переменных с учетом других переменных условий - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь сгенерировать разные переменные общего количества по компаниям и годам.

Один «общий счет» для сабов и один общий счет для ссуд.

В основном я пытаюсь расширить этот вопрос: Stata: Рассчитать сумму любого x в y?

* 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'?

Ответы [ 2 ]

1 голос
/ 02 мая 2020

Это немного сложно для подражания.

  • В вашем коде есть ссылка на 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 не такой общий метод подсчета, как вам нужно здесь.

0 голосов
/ 02 мая 2020

Я думаю, что нашел решение:

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

, затем просто сделайте то же самое для других переменных.

...