【问题标题】:Contracting dataset to only hold unique values for a variable收缩数据集以仅保存变量的唯一值
【发布时间】:2019-09-30 04:46:44
【问题描述】:

假设我有以下数据集作为玩具示例:

clear

input str32 Country Population_1 Population_2 
"United States of America" 3999 .
"United States of America" .  3447
"Afghanistan" 544 .
"Afghanistan" . 727
"Belgium" 7546 .
"Belgium" . 992
"China" 10000 .
"China" .  12000
end

我想缩小数据集,以便国家/地区只有一个唯一值。

我的最终数据集应如下所示:

Country                    Population_1   Population_2
United States of America       3999           3447
Afghanistan                     544            727
Belgium                        7546            992
China                         10000          12000

我尝试使用collapse 命令,但没有得到预期的结果。命令duplicates drop 也不起作用,因为我没有从Population_2 获得观察结果。

【问题讨论】:

    标签: stata


    【解决方案1】:

    这对我有用:

    collapse Pop*, by(Country) 
    
    list, abbreviate(12)
    
         +--------------------------------------------------------+
         |                  Country   Population_1   Population_2 |
         |--------------------------------------------------------|
      1. |              Afghanistan            544            727 |
      2. |                  Belgium           7546            992 |
      3. |                    China          10000          12000 |
      4. | United States of America           3999           3447 |
         +--------------------------------------------------------+
    

    【讨论】:

      【解决方案2】:

      以下对我有用:

      generate Population_ = .
      
      by Country, sort: replace Population_ = Population_2 if Population_1 == .
      by Country, sort: replace Population_ = Population_1 if Population_2 == .
      
      by Country: generate time = _n
      
      drop Population_1 Population_2
      
      reshape wide Population_, i(Country) j(time)
      

      【讨论】:

        【解决方案3】:

        community-contributed 命令gcollapse 也可以在数据集中保留想要的变量:

        gcollapse (sum) Pop*, merge replace by(Country)
        duplicates drop Country, force
        

        【讨论】:

        • 这是另一个问题的答案。
        • 这是我最初的问题 - 我的原始数据集有许多我想保留的其他变量,只想collapse 人口变量。我应该创建一个新问题吗?
        • 您可能已经想到了,但我们不知道,而且您还没有编辑原始问题。更重要的是,一些变量的collapse 没有其他变量是没有意义的。如果一个变量在(比如说)国家内是数值恒定的,那么它的恒定值将是来自collapse 的平均值;如果字符串变量的不同值有用或感兴趣,则它们属于by()。作为duplicates 的原作者,我警告并未经批准在此处毫无理由地使用force 选项;因为在余生中,力量充其量是绝望的最后手段。
        • @NickCox 提出了一个很好的观点。请注意,您也可以使用多行代码并且仅使用内置命令来执行相同操作。
        • 而不是force 选项,是否明智地使用:drop if missing(City)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-01
        • 2019-12-30
        • 1970-01-01
        • 2014-08-16
        • 1970-01-01
        相关资源
        最近更新 更多