首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据数据值有条件地计算和

根据数据值有条件地计算和
EN

Stack Overflow用户
提问于 2019-05-07 09:11:04
回答 1查看 62关注 0票数 0

我有一个相当大的冲突数据集(7100万次观察),有许多变量和日期(每天)。

这是GDELT项目的。每天都有一个目标国家和一个侵略来源国。例如,在1 January 2000上,许多国家参与了针对他人或自己的侵略行为。

看起来是这样的:

代码语言:javascript
复制
clear

input long date_01 str18 source_01 str19 target_01 str4 cameocode_01
20000101 "AFG"    "AFGGOV" "2" 
20000101 "AFG"    "AFGGOV" "8"
20000101 "AFG"    "ARE"    "3" 
20000101 "AFG"    "CVL"    "4" 
20000101 "AFG"    "GOV"    "10" 
20000101 "AFG"    "GOV"    "4" 
20000101 "AFGGOV" "kasUAF" "3"
20000101 "FRA"    "kasUAF" "8" 
20000101 "AFG"    "IGOUNO" "3" 
20000101 "AFG"    "IND"    "4" 
20000101 "AFG"    "IND"    "12"
20000102 "AFG"    "IND"    "19"  
end

变量date_01是一天,source_01是发起侵略的国家,target_01是受害者,cameocode_01是关注的变量,表示敌对或合作的程度。如果这个数字介于1020之间,那就是敌对事件,而20则是更具敌意的事件。如果数字介于09之间,则表示合作(好事件),其中9是最友好的。

我管理在这个平台的帮助下隔离每个国家的事件,即分离涉及一定数量的国家(我对30感兴趣)的cameo代码,以跟踪它们的冲突随时间的演变。

我做了以下工作:

代码语言:javascript
复制
foreach c in AFG IND ARE {
    generate ind_`c' = cameocode_01 if strmatch(source_01, "`c'") |  ///
                                       strmatch(target_01, "`c'")
}

这产生了所需的结果:

代码语言:javascript
复制
        date      source      target    cameocode   ind_AFG   ind_IND   ind_ARE

1.  20000101         AFG      AFGGOV            2         2                    
2.  20000101         AFG         IND            4         4         4           
3.  20000101         AFG      AFGGOV            8         8                     
4.  20000101         AFG         ARE            3         3        36       
5.  20000101         AFG         CVL            4         4                     
6.  20000101         AFG         GOV           10        10                      
7.  20000101         AFG         GOV            4         4                      
8.  20000101      AFGGOV      kasUAF            3                               
9.  20000101      AFGGOV      kasUAF            8                                
10. 20000101        AFG         IRQ            12        12                     
11. 20000102        AFG         IND            19        19        19           

每当某个国家作为接收者或发起者参与进来时,我都会创建一个新的变量,将特定事件及其强度隔离为给定日期。

我现在要做的是能够创建一个标准化的度量或比率,对于每个日期,冲突度量的总和(从1020)除以每个国家的合作措施(从19的数字)之和。

因此,对于上面的AFG 20000101表(第5列),我想要的输出是:

代码语言:javascript
复制
(12+19) / (2+4+8+3+4+4)

我想对每个变量ind_COUNTRY CODE的每个日期重复这一步骤,使每个国家每天都有一个数字。

有办法这样做吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-07 09:42:19

这似乎是你要找的关键伎俩。

代码语言:javascript
复制
clear
input long date str6 source float cameocode
20000101 "AFG"     2
20000101 "AFG"     4
20000101 "AFG"     8
20000101 "AFG"     3
20000101 "AFG"     4
20000101 "AFG"    10
20000101 "AFG"     4
20000101 "AFGGOV"  3
20000101 "AFGGOV"  8
20000101 "AFG"    12
end

egen num = total(cond(cameocode >= 10, cameocode, .)), by(date source)

egen den = total(cond(cameocode < 10, cameocode, .)), by(date source)

generate wanted = num / den

sort date source

list, sepby(source)

     +------------------------------------------------------------+
     |     date   source   target   cameoc~e   num   den   wanted |
     |------------------------------------------------------------|
  1. | 20000101      AFG      IND          4    22    25      .88 |
  2. | 20000101      AFG      GOV          4    22    25      .88 |
  3. | 20000101      AFG   AFGGOV          2    22    25      .88 |
  4. | 20000101      AFG   AFGGOV          8    22    25      .88 |
  5. | 20000101      AFG      IRQ         12    22    25      .88 |
  6. | 20000101      AFG      GOV         10    22    25      .88 |
  7. | 20000101      AFG      CVL          4    22    25      .88 |
  8. | 20000101      AFG      ARE          3    22    25      .88 |
     |------------------------------------------------------------|
  9. | 20000101   AFGGOV   kasUAF          8     0    11        0 |
 10. | 20000101   AFGGOV   kasUAF          3     0    11        0 |
     +------------------------------------------------------------+

有关技术,请参见本文第9节和第10节。基本思想是,许多egen函数允许将表达式作为参数,这可能比变量名称更复杂。在这里,我们使用cond()来指定只有在某些时间间隔内的值才应该被总计。

在创建变量方面,透明度较低但浪费较少的配方将运行如下

egen wanted =!分子密码!

egen den =!分母代码!

replace wanted = wanted / den

drop den

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56019219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档