我想创建一个在任何给定时间部署在国外的士兵数量的时间表。
Operation Start End Soldiers
Operation 1 24.03.1999 14.01.2001 447
Operation 2 15.05.2004 03.03.2009 880
Operation 3 19.12.2006 24.01.2014 4390
为了简单起见,我假设在一次行动中部署的士兵数量随着时间的推移是恒定的。
然而,我们不能假设所有士兵都是在同一时间部署的,并在整个时期都留了下来。如果第四次行动持续了30年,由24000名士兵组成,我们不能假设所有24000人都部署了30年。如果需要的话,我们可以假设每个士兵都呆了一年。
我假设我应该生成一个句号,并将士兵数量除以天数。
gen duration = End - Start
然而,我不知道从这里到哪里去。任何关于如何(a)确定任何给定年份部署的士兵(平均)数量和(b)明确表示这一点的建议都将深表感谢。
PS:过去关于绘图操作的一个问题是,有些操作是在同一天开始的。
发布于 2015-07-15 18:37:36
这比您担心的要简单,但是您需要一个不同的数据结构。考虑到海外士兵的数量在行动开始时增加,在行动结束时减少。如果你只想数士兵,他们是相同的人还是不同的人是无关紧要的。或者,您不给出计算不同士兵数量的基础信息。
这里的技术是在this paper中编写的,但其本质是通过其标题来传达的。根据结果,使用line
可以立即绘制图形;它的connect(J)
选项可能看起来很合适。
clear
input Operation str10(sStart sEnd) Soldiers
1 "24.03.1999" "14.01.2001" 447
2 "15.05.2004" "03.03.2009" 880
3 "19.12.2006" "24.01.2014" 4390
end
foreach v in Start End {
gen `v' = daily(s`v', "DMY")
drop s`v'
}
expand 2
bysort Operation: gen Date = cond(_n == 1, Start, End)
by Operation: gen Status = (_n == 1) - (_n == 2)
format Date %td
list
sort Date Status
gen Total = sum(Status * Soldiers)
bysort Date : replace Total = Total[_N]
list Date Status Soldiers Total, sep(0)
+---------------------------------------+
| Date Status Soldiers Total |
|---------------------------------------|
1. | 24mar1999 1 447 447 |
2. | 14jan2001 -1 447 0 |
3. | 15may2004 1 880 880 |
4. | 19dec2006 1 4390 5270 |
5. | 03mar2009 -1 880 4390 |
6. | 24jan2014 -1 4390 0 |
+---------------------------------------+
https://stackoverflow.com/questions/31425692
复制相似问题