Stata中生成排除同作物的Lender同国别累计贷款数变量
问题描述
现有贷款级数据结构如下:
Loan Borrower Lender Date Crop Country Number 1 A X 01/01/20 Coffee USA 0 2 B X 01/02/20 Coffee USA 0 3 C X 01/03/20 Coffee USA 0 4 D X 01/04/20 Coffee USA 0 5 E X 01/05/20 Banana USA 4 6 F X 01/06/20 Banana USA 4 7 G X 01/07/20 Coffee USA 2 8 H X 01/08/20 Orange USA 7 9 I X 01/09/20 Coffee USA 3 . . . . . . . . . . . . . .
需要创建Number变量,规则如下:
- 统计贷款发放时,对应放款人(Lender)已发放的累计贷款数(含当前贷款)
- 仅统计同一国家(Country)内的贷款
- 排除同一国家内同作物(Crop)的所有贷款
即Number表示:该贷款对应的放款人在同一国家发放的、非当前作物的贷款数量。
尝试过以下代码,但无法实现排除同作物贷款的需求:
bysort Lender Country (Date): gen var = _n
解决方案
可以通过分步计算累计总数与同作物累计数的差值来实现需求,具体Stata代码如下:
* 1. 将日期字符串转换为Stata可识别的数值型日期(确保按日期排序的准确性) gen date_num = date(Date, "MDY") format date_num %td * 2. 计算同一放款人+国家下,累计到当前贷款的总数量(含当前) bysort Lender Country (date_num): gen total_all = _n * 3. 计算同一放款人+国家+作物下,累计到当前贷款的同作物数量(含当前) bysort Lender Country Crop (date_num): gen total_same_crop = _n * 4. 总累计数减去同作物累计数,得到目标变量Number gen Number = total_all - total_same_crop * (可选)删除中间变量 drop date_num total_all total_same_crop
代码逻辑说明:
- 转换日期是为了避免字符串日期排序出错;
total_all统计了当前放款人在对应国家内,到当前贷款为止的所有累计贷款数;total_same_crop统计了当前放款人在对应国家内,同作物的累计贷款数;- 两者的差值正好符合需求:同一国家内非当前作物的累计贷款数。
内容的提问来源于stack exchange,提问作者user19923407
相关产品推荐
相关产品推荐

