- 阅读权限
- 255
- 威望
- 0 级
- 论坛币
- 2633 个
- 通用积分
- 10.1479
- 学术水平
- 2 点
- 热心指数
- 8 点
- 信用等级
- 0 点
- 经验
- 22096 点
- 帖子
- 417
- 精华
- 0
- 在线时间
- 855 小时
- 注册时间
- 2006-12-26
- 最后登录
- 2025-10-9
|
- [code]/*
- OECD投入产出表分析:计算直接消耗系数、完全消耗系数和制造业服务化水平
- 功能:批量处理多个国家数据,输出各国制造业服务化水平
- */
- * 清除内存数据,设置工作目录
- clear all
- set more off
-
- * 设置工作目录(请修改为实际数据所在目录)
- cd "C:\your\data\directory"
-
- * 定义制造业和服务业部门(根据实际数据的部门编号调整)
- * 例如:假设10-15为制造业部门,16-25为服务业部门
- local manufacturing_sectors 10 11 12 13 14 15
- local service_sectors 16 17 18 19 20 21 22 23 24 25
-
- * 创建存储结果的数据集
- clear
- set obs 0
- gen country = ""
- gen servitization_level = .
- save servitization_results.dta, replace
-
- * 获取所有投入产出数据文件(假设为CSV格式)
- local files: dir . files "*.csv"
-
- * 批量处理每个国家的数据
- foreach file of local files {
- * 提取国家名称(假设文件名为"国家名_io.csv"格式)
- local country = subinstr("`file'", "_io.csv", "", .)
- di "正在处理:`country'"
-
- * 读取投入产出表数据
- import delimited "`file'", clear
-
- * 假设最后一列是总产出,前面的列是中间投入
- local n_cols = c(k)
- local output_col = `n_cols'
- local input_cols = `n_cols' - 1
-
- * 将数据转换为矩阵
- matrix input_matrix = J(`input_cols', `input_cols', .)
- matrix output_vector = J(`input_cols', 1, .)
-
- * 填充矩阵数据
- forvalues i = 1/`input_cols' {
- * 总产出向量
- matrix output_vector[`i',1] = v`output_col'[`i']
-
- * 投入矩阵
- forvalues j = 1/`input_cols' {
- matrix input_matrix[`i',`j'] = v`j'[`i']
- }
- }
-
- * 计算直接消耗系数矩阵A = input_matrix ./ output_vector
- matrix A = J(`input_cols', `input_cols', .)
- forvalues j = 1/`input_cols' {
- if output_vector[`j',1] > 1e-6 { // 避免除以零
- forvalues i = 1/`input_cols' {
- matrix A[`i',`j'] = input_matrix[`i',`j'] / output_vector[`j',1]
- }
- }
- }
-
- * 计算完全消耗系数矩阵B = (I - A)^(-1) - I
- matrix I = I(`input_cols') // 单位矩阵
- matrix IA = I - A // I - A
-
- * 检查矩阵是否可逆
- capture matrix IA_inv = inv(IA)
- if _rc != 0 {
- di "警告:`country'的矩阵不可逆,跳过该国家"
- continue
- }
-
- * 计算完全消耗系数
- matrix B = IA_inv - I
-
- * 计算制造业服务化水平:制造业部门对服务业部门的完全消耗之和
- local sum = 0
- foreach m of local manufacturing_sectors {
- foreach s of local service_sectors {
- * 检查部门编号是否在有效范围内
- if `m' <= `input_cols' & `s' <= `input_cols' {
- local sum = `sum' + B[`s',`m']
- }
- }
- }
-
- * 将结果添加到结果数据集中
- preserve
- use servitization_results.dta, clear
- set obs `=_N + 1'
- replace country = "`country'" in `=_N'
- replace servitization_level = `sum' in `=_N'
- save servitization_results.dta, replace
- restore
- }
-
- * 输出最终结果
- use servitization_results.dta, clear
- sort servitization_level
- list country servitization_level, clean
-
- * 导出为CSV文件
- export delimited using "manufacturing_servitization_results.csv", replace
-
- di "分析完成,结果已保存为manufacturing_servitization_results.csv"
复制代码[/code]
|
|