在另一个条件值之外创建变量
Creating variable out of conditional values in another one
我有一个相当大的冲突数据集(7100 万个观测值),其中包含许多变量和日期(每天)。
这来自 GDELT 项目,其数据集的结构方式是每天都有一个目标国家和一个侵略源国家。也就是说,2000 年 1 月 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
但是,它说类型不匹配,我怀疑它是否会给我想要的东西。
如果您事先知道您感兴趣的国家/地区,那么以下方法会奏效:
clear
input long date_01 str18 source_01 str19 target_01 str4 cameocode_01
20000101 "AFG" "AFGGOV" "020"
20000101 "AFG" "IND" "043"
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"
20000102 "AFG" "IND" "042"
end
foreach c in AFG IND ARE {
generate ind_`c' = cameocode_01 if strmatch(source_01, "`c'") | ///
strmatch(target_01, "`c'")
}
请注意,为了更好地说明,我稍微修改了您的示例。
查看结果:
list, sepby(date) abbreviate(15)
+-------------------------------------------------------------------------------+
| date_01 source_01 target_01 cameocode_01 ind_AFG ind_IND ind_ARE |
|-------------------------------------------------------------------------------|
1. | 20000101 AFG AFGGOV 020 020 |
2. | 20000101 AFG IND 043 043 043 |
3. | 20000101 AFG AFGGOV 0841 0841 |
4. | 20000101 AFG ARE 036 036 036 |
5. | 20000101 AFG CVL 043 043 |
6. | 20000101 AFG GOV 010 010 |
7. | 20000101 AFG GOV 043 043 |
8. | 20000101 AFGGOV kasUAF 0353 |
9. | 20000101 AFGGOV kasUAF 084 |
10. | 20000101 AFG IGOUNO 030 030 |
|-------------------------------------------------------------------------------|
11. | 20000102 AFG IND 042 042 042 |
+-------------------------------------------------------------------------------+
或
foreach v of varlist ind* {
sort date `v'
list date `v' if !missing(`v'), sepby(date) abbreviate(15)
}
+--------------------+
| date_01 ind_AFG |
|--------------------|
3. | 20000101 010 |
4. | 20000101 020 |
5. | 20000101 030 |
6. | 20000101 036 |
7. | 20000101 043 |
8. | 20000101 043 |
9. | 20000101 043 |
10. | 20000101 0841 |
|--------------------|
11. | 20000102 042 |
+--------------------+
+--------------------+
| date_01 ind_IND |
|--------------------|
10. | 20000101 043 |
|--------------------|
11. | 20000102 042 |
+--------------------+
+--------------------+
| date_01 ind_ARE |
|--------------------|
10. | 20000101 036 |
+--------------------+
我有一个相当大的冲突数据集(7100 万个观测值),其中包含许多变量和日期(每天)。
这来自 GDELT 项目,其数据集的结构方式是每天都有一个目标国家和一个侵略源国家。也就是说,2000 年 1 月 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
但是,它说类型不匹配,我怀疑它是否会给我想要的东西。
如果您事先知道您感兴趣的国家/地区,那么以下方法会奏效:
clear
input long date_01 str18 source_01 str19 target_01 str4 cameocode_01
20000101 "AFG" "AFGGOV" "020"
20000101 "AFG" "IND" "043"
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"
20000102 "AFG" "IND" "042"
end
foreach c in AFG IND ARE {
generate ind_`c' = cameocode_01 if strmatch(source_01, "`c'") | ///
strmatch(target_01, "`c'")
}
请注意,为了更好地说明,我稍微修改了您的示例。
查看结果:
list, sepby(date) abbreviate(15)
+-------------------------------------------------------------------------------+
| date_01 source_01 target_01 cameocode_01 ind_AFG ind_IND ind_ARE |
|-------------------------------------------------------------------------------|
1. | 20000101 AFG AFGGOV 020 020 |
2. | 20000101 AFG IND 043 043 043 |
3. | 20000101 AFG AFGGOV 0841 0841 |
4. | 20000101 AFG ARE 036 036 036 |
5. | 20000101 AFG CVL 043 043 |
6. | 20000101 AFG GOV 010 010 |
7. | 20000101 AFG GOV 043 043 |
8. | 20000101 AFGGOV kasUAF 0353 |
9. | 20000101 AFGGOV kasUAF 084 |
10. | 20000101 AFG IGOUNO 030 030 |
|-------------------------------------------------------------------------------|
11. | 20000102 AFG IND 042 042 042 |
+-------------------------------------------------------------------------------+
或
foreach v of varlist ind* {
sort date `v'
list date `v' if !missing(`v'), sepby(date) abbreviate(15)
}
+--------------------+
| date_01 ind_AFG |
|--------------------|
3. | 20000101 010 |
4. | 20000101 020 |
5. | 20000101 030 |
6. | 20000101 036 |
7. | 20000101 043 |
8. | 20000101 043 |
9. | 20000101 043 |
10. | 20000101 0841 |
|--------------------|
11. | 20000102 042 |
+--------------------+
+--------------------+
| date_01 ind_IND |
|--------------------|
10. | 20000101 043 |
|--------------------|
11. | 20000102 042 |
+--------------------+
+--------------------+
| date_01 ind_ARE |
|--------------------|
10. | 20000101 036 |
+--------------------+