You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何转置NSF原始Excel数据集以适配Stata分析格式的代码咨询

NSF数据集Excel转置适配Stata操作指南

方案1:纯Stata端处理(适合结构相对简单的数据集)

  • 第一步:导入Excel并初步规范变量名
    跳过冗余表头行(可根据实际数据调整cellrange的起始行,示例默认从第3行开始为有效数据),导入时统一变量名格式:
    import excel "你的NSF数据集本地路径.xlsx", cellrange(A3) firstrow case(lower)
  • 第二步:清理非法变量名
    替换变量名中的空格、特殊字符,修正不符合Stata命名规则的内容:
    * 替换变量名空格为下划线
    renvars, subst(" " "_")
    * 删除变量名开头的非法下划线
    renvars, predrop("_")
    * 重复变量名自动加数字后缀
    rename * *, addnumber
    
  • 第三步:按需执行转置
    如果需要宽表转长表(比如把列存储的年度指标转为行存储):
    reshape long 指标变量前缀, i(机构ID 学科分类ID) j(year)
    如果需要整张表完全转置:
    * 全表转置,保留原变量名到指定列
    xpose, clear varname
    * 重置转置后的变量名
    rename * v*
    foreach var of varlist * {
        rename `var' `= `var'[1]'
    }
    * 删除冗余的表头行
    drop in 1
    

方案2:Python预处理后导入Stata(适合多级嵌套表头的复杂数据集)

如果原始表表头嵌套层数多,Stata直接导入容易丢失变量名信息,可先用Python预处理:

import pandas as pd
# 读取Excel,skiprows参数对应需要跳过的表头行数
df = pd.read_excel("你的NSF数据集本地路径.xlsx", skiprows=2, engine="openpyxl")
# 合并多级表头(如果存在)
df.columns = ['_'.join([str(c) for c in col]).strip() for col in df.columns.values]
# 执行转置
df_transposed = df.T.reset_index()
# 重置转置后的列名
df_transposed.columns = df_transposed.iloc[0].tolist()
df_transposed = df_transposed[1:].reset_index(drop=True)
# 导出为Stata14及以上版本兼容的dta格式
df_transposed.to_stata("转置后的NSF数据集.dta", write_index=False, version=14)

注意事项

  • 操作前备份原始Excel文件,避免数据丢失
  • 转置完成后随机抽取3-5个单元格比对原始表取值,确认无错位
  • 若变量名长度超过32字符,Stata会自动截断,可在转置前手动简化变量名

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 07:27:02