【发布时间】:2019-05-01 10:31:19
【问题描述】:
我有一个相当大的冲突数据集(7100 万次观察),其中包含许多变量和日期(每天)。
这来自 GDELT 项目,其数据集的结构方式是每天都有一个目标国家和一个侵略源国家。即,2000 年 1 月的第一天,许多国家对他人或自己采取了攻击性行为,该数据集对此进行了跟踪。
看起来像这样:
clear
input long date_01 str18 source_01 str19 target_01 str4 cameocode_01
20000101 "AFG" "AFGGOV" "020"
20000101 "AFG" "AFGGOV" "0841"
20000101 "AFG" "ARE" "036"
20000101 "AFG" "CVL" "043"
20000101 "AFG" "GOV" "010"
20000101 "AFG" "GOV" "043"
20000101 "AFGGOV" "kasUAF" "0353"
20000101 "AFGGOV" "kasUAF" "084"
20000101 "AFG" "IGOUNO" "030"
20000101 "AFG" "IND" "042"
20000101 "AFG" "IND" "043"
end
我想做的是按国家/地区隔离这些事件。
例如,我想为美国创建一个变量,在该变量中,对于每个日期,我都有美国是目标或来源的所有时间,以及它们各自的客串代码。我有相当多的国家,但只需要其中的一部分,而且我提前知道它们的名字。
正如您在示例中看到的,第一个变量是日期,对于这些单元格而言,日期始终为 2000101,但经过数百次观察后,它变为 2000102,表示日期发生了变化。
第二个变量source_01 是一个国家攻击另一个国家。在示例中,IND 是印度,AFG 是阿富汗,其他代码是其他国家/地区。
第三个变量target_01只是冲突的受害者。
最后,cameocode_01 是使用某种算法衡量的冲突强度级别,该算法跟踪每种语言的新闻。
我所追求的是创建一个新的(按国家/地区)变量,如果特定国家/地区作为源或目标涉及,则该变量提取该事件的客串代码。
对于这个具体的例子,下面是我想要的印度案例的输出(代码IND),它涉及特定日期的两个事件:
date INDIAcameo
20000101 "042"
20000101 "043"
我试过这个:
replace INDIA cameo=cameocode if "target" ~ "source" ==IND
但是,它说类型不匹配,我怀疑它是否会给我我想要的东西。
【问题讨论】:
-
请注意,这些日期不适合任何严肃的目的,如果您考虑一下当您从 20000131 跳转到 20000201 以及从 20001231 跳转到 20010101 时会发生什么,就会清楚。合适的每日日期将由
gen better_date = daily(string(date_01, "%8.0f"), "YMD")后跟format better_date %td或类似的。
标签: if-statement subset stata qualifiers