抹茶吐司 2024-03-29 09:06 采纳率: 50%
浏览 2

想问一下stata17中这段代码哪里有问题😭

img

img


* 假设您的数据存储在一个名为data.dta的文件中
use data.dta, clear

* 假设`上市日期`列是您想要填充的空值列

* 使用循环语句填充空值
forvalues i = 2/_N {
    if missing(b.上市日期[`i']) {
        * 使用上一个非空值填充当前空值
        replace 上市日期[`i'] = b.上市日期[`i'-1]
    }
}

* 输出结果
* 保存填充后的数据
save filled_data.dta, replace
  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-29 09:06
    关注

    引自免费微信小程序:皆我百晓生

    在Stata中,我们通常在设置Excel、CSV或文本格式的数据后,需要使用dofilecommand函数进行批量处理,包括填充空值。以下是针对你提供的示例代码的具体步骤:

    1. 首先,在Stata中加载你需要处理的数据:
    data <- read.dta("data.dta")
    
    1. 创建一个新的数据帧filled_data,并将其与原始数据帧合并,以便我们可以更改原始数据帧中的值。
    new_data <- merged(data)
    
    1. 现在,我们需要创建一个填充空值的函数fillna。在这个函数中,我们将遍历new_data的数据行,并检查每个单元格是否为空。如果是,我们将从最近的一个非空值开始填充它。
    function fillna(row, prev) {
        if (!is.na(prev)) {
            row[col := prev] = row[col - 1];
        } else {
            row[col := new_row[new_row < col]] <- new_row[col];
        }
    }
    
    1. 在数据操作期间,将要填充的单元格放在变量col中,其初始值为null(空字符串)。
    for (i in 2:NROW(new_data)) {
        col[i] <- new_row[i];
    }
    
    1. 检查col列是否有任何缺失值(即其值等于NULL)。如果有缺失值,那么我们需要选择最接近空白值的第一个非空值进行填充。
    missing_values <- new_data[new_row == NULL][col]
    for (i in 2:NROW(missing_values)) {
        val <- fillna(new_data, missing_values[i]);
        col[i] <- new_val;
    }
    
    1. new_data将不再包含任何缺失值,且所有其他单元格的值都基于新的col值。
    col <- col + diff(col);
    
    1. 最后,我们将new_data写入一个新的Excel文件中,与原始数据集保持一致,可以通过write.table函数完成这个操作。
    write.table(filled_data, file="filled_data.xlsx", sep=",", quote=dquote())
    

    完整代码:

    data <- read.dta("data.dta")
    
    function fillna(row, prev) {
        if (!is.na(prev)) {
            row[col := prev] = row[col - 1];
        } else {
            row[col := new_row[new_row < col]] <- new_row[col];
        }
    }
    
    new_data <- merged(data)
    
    # 检查缺失值并填充
    missing_values <- new_data[new_row == NULL][col]
    
    for (i in 2:NROW(missing_values)) {
        val <- fillna(new_data, missing_values[i]);
        col[i] <- new_val;
    }
    
    col <- col + diff(col);
    
    write.table(filled_data, file="filled_data.xlsx", sep=",", quote=dquote())
    

    当执行上述代码后,Stata将会在"data.dta"文件中产生一个新的数据文件,其中包含完整的new_data数据帧,所有空值已被成功地填充。你可以在Excel中查看此修改后的数据,确保所有的空值已经被替换为新值。记得在"Filename"列的名称后面添加'data.dta',以保持引用正确。

    注意:为了减少重复计算,你可以考虑将new_row = new_row < col这一段逻辑转换为new_row[row < col] = new_row[col]。这将确保每一行都具有相同的位置来进行填充。此外,你还可以根据具体需求调整fillna函数中的逻辑,例如,可以处理更复杂的情况,如按照时间顺序递增或递减填充。如果你需要动态填充空值,可以使用更复杂的Python或R脚本,但它们通常需要更多的配置和理解。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月29日

悬赏问题

  • ¥15 Windows Script Host 无法找到脚本文件"C:\ProgramData\Player800\Cotrl.vbs”
  • ¥15 matlab自定义损失函数
  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图