如何转置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
相关产品推荐
相关产品推荐

