You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Stata中转换分组直方图数据为重复行数据的方法咨询

把直方图汇总数据展开为Stata行数据的方法

我明白你需要把这种汇总的直方图频次数据(比如-5--56-代表5重复56次)展开成逐行的原始观测值,这样才能顺利使用DCdensity命令——毕竟这个工具通常需要基于原始行数据来计算密度,而不是汇总的频次统计。下面是在Stata里实现这个转换的具体步骤,完全不需要修改命令源代码:


方法一:从字符串格式的直方图数据开始转换

如果你的数据是以类似-5--56-这种字符串形式存储的,先按以下步骤处理:

  1. 创建并导入原始数据
    先把你的直方图数据导入Stata(这里以手动输入为例,你也可以用import命令读取外部文件):

    clear
    input str15 hist_entry
    "-5--56-"
    "-10--70-"
    "-15--60-"
    "-20--67-"
    "-25--62-"
    end
    
  2. 拆分字符串,提取数值和频次
    用字符串处理命令把每个条目拆分成对应的数值(比如5、10)和重复次数(比如56、70):

    * 提取核心数值(去掉前后的横杠,取--前的部分)
    gen value = real(substr(hist_entry, 2, strpos(hist_entry, "--") - 2))
    * 提取重复频次(取--后的部分,去掉末尾的横杠)
    gen freq = real(substr(hist_entry, strpos(hist_entry, "--") + 2, length(hist_entry) - strpos(hist_entry, "--") - 2))
    

    这里real()函数是把拆分出来的字符串转换成数值型变量,方便后续处理。

  3. 按频次展开行数据
    用Stata内置的expand命令,把每一行按对应的频次重复:

    expand freq
    * 展开后可以删除不需要的中间变量
    drop hist_entry freq
    
  4. 使用DCdensity命令
    现在你的数据集已经是每行一个观测值的格式,直接运行命令即可:

    DCdensity value
    

方法二:如果数据已经是数值+频次的列格式

如果你的数据已经提前拆分好了(比如有一列是数值value,一列是频次freq),那步骤更简单,直接跳过字符串拆分环节,运行expand freq就能得到需要的行数据,之后再调用DCdensity即可。


小提示

  • 展开后可以用list命令检查数据是否正确,比如list in 1/100看看前100行的数值是否符合重复次数。
  • 如果你的直方图数据里有负数(比如-5),上述拆分命令依然有效,因为substr会正确提取--前的负号部分,real()也能识别负数值。

内容的提问来源于stack exchange,提问作者DN1995

火山引擎 最新活动