目标: 对 多个 总量指标变量 实施 对数变换(所有变量均大于等于零)
其中, 对于最小值是 0 的变量, 对数变换为 ln(1+var)
对于最小值 非零 的变量, 对数变换为 ln(var)
原始程序:
local f "x y z"
foreach v of varlist `f' {
local s = min( `v' ) // 错误地使用 min() 函数
if `s' == 0 {
gen ln_`v' = ln( 1 + `v' )
label var ln_`v' "ln(1+`v')"
order ln_`v', after( `v' )
}
else {
gen ln_`v' = ln( `v' )
label var ln_`v' "ln(`v')"
order ln_`v', after( `v' )
}
}
原始程序注释:
local f "x y z" // 定义局部宏`f' 为双引号中的元素
foreach v of varlist `f' { // 设定循环条件: 定义局部宏 `v' 为变量列表(varlist)中的每一项
local s = min( `v' ) // 定义局部宏`s' 为局部宏`v' 所代表的变量的最小值
if `s' == 0 { // if语句: 如果 `s' = 0
gen ln_`v' = ln( 1 + `v' ) // 创建名为ln_`v' 的变量, 取值为 ln(1+`v')
label var ln_`v' "ln(1+`v')" // 给新生成的ln_`v' 添加标签为"ln(1+`v')"
order ln_`v', after( `v' ) // 将新生成的ln_`v' 排序到 `v' 之后
} // if语句结束
else {
gen ln_`v' = ln( `v' ) // 否则(即if `s' != 0), 创建名为ln_`v' 的变量, 取值为 ln(`v')
label var ln_`v' "ln(`v')" // 给新生成的ln_`v' 添加标签为"ln(`v')
order ln_`v', after( `v' ) // 将新生成的ln_`v' 排序到 `v' 之后
} // else语句结束
}
自己检查了好几遍, 认为没有问题, 可是在stata12中运行, 总是报告:
invalid syntax
r(198);
特此向各位坛友请教! 烦请发现问题的坛友 用红色字体标记出错的地方, 并在第二行提供正确的程序代码. 谢谢!
感谢 蓝色版主
错误原因在于: 我在没有对其功能真正了解的情况下, 想当然地使用了 min() 函数
修改后的正解在 7楼


雷达卡




京公网安备 11010802022788号







