arlionn 发表于 2011-4-10 10:26 
2011-05-06 修改:将 vv(两个v) 修改为 xx。
较为原始的方法:
以下内容为根据 help macro 和 help foreach 的帮助文件, 对连老师给出的方法加以注释(// 后面蓝色字体的内容), 便于自己和其他坛友学习领会. 如果有解释的不对地方, 还请各位坛友指正.
对多个变量进行winsor处理
===========================================================================
较为原始的方法:
*-主要变量 winsor 处理 // 对接下来要完成的任务加以说明和解释
local xx "acc sale Lsale Dsale LDsale cfo Dinv prod disexp PPE DAR" // 定义局部宏 `xx' 为 前后双引号""所引用的字符
foreach v of varlist `xx'{ // 循环开始, 设定循环条件: 定义局部宏 `v' 为分项清单(此处为变量列表 varlist)
中的每一项
local a: var lab `v' // 利用拓展的宏函数(variable label varname)定义局部宏 `a' 为 `v' 所指的变量的
标签内容
winsor `v', p(0.01) gen(`v'_x) // 对 `v' 进行缩尾处理, 缩尾率为1%, 并生成新变量, 新变量名的格式为
`v'名+后缀_x
drop `v' // 删除局部宏 `v'
rename `v'_x `v' // 将新生成的变量 `v'_x 重新命名为 `v' (`v' 已删除, 不会出现`v' 已存在的报错)
label var `v' "`a'" // 给已经重新命名的新生变量 `v' 添加标签为 局部宏 `a' 中的内容
} //
foreach循环结束
===========================================================================