arlionn 发表于 2013-2-20 10:21 
local x "x1 x2" // 填入所有变量名称
foreach v of varlist `x'{
local ty: type `v'
连老师,非常感谢您的回复和帮助!
以下是参考
help local
help data type
help substr
对连老师回复的解决方案的注释(// 后面蓝色字体的内容).
便于自己和其他坛友学习领会. 如果有解释的不对地方, 还请各位坛友指正.
==========================================================================
local x "x1 x2" // 填入所有变量名称 //
定义局部宏 `x' 为 前后双引号("")中所引用的元素
foreach v of varlist `x'{ //
循环开始, 设定循环条件: 定义局部宏 `v' 为分项清单(此处为变量列表 varlist)
中的每一项
local ty: type `v'
// 利用拓展的宏函数( typevarname )定义局部宏 `ty' 为`v' 所指的变量的
数据存储格式, 包括: int, long, float, double, str1, str2 等.
local ty = substr("`ty'", 1, 3) //
利用函数substr(s,n1,n2), 定义局部宏(新的)`ty' 为(原有的)局部宏`ty' 的
表达式(添加了双引号)的子字符串, n1表示提取子字符串的起始位置(这里是
从左起第1个字符开始), n2表示子字符串的提取长度(这里是选取3个字符).
if "`ty'" != "str"{ //
告知stata, if (新的)局部宏`ty'的表达式(添加双引号) 不等于 "str", 则利用
generate 命令完成两项任务:
gen ln_`v' = ln(`v') //
(a) 创建变量名为 ln_`v' 的新变量1, 是`v'所代表的变量的取值的对数函数值;
gen log_`v' = ln(1+`v') //
(b) 创建变量名为log_`v' 的新变量2, 是`v'所代表的变量的取值加1的对数函数值;
} //
if条件语句结束
}
// foreach循环语句结束, foreach循环内完成3项任务:
(1) 定义局部宏`ty' 为局部宏`v' 的数据存储类型;
(2) 定义新的局部宏`ty'为原有的局部宏`ty' 的表达式(添加了双引号)的前3个字符;
(3) 对满足 if 语句的局部宏`v', 即数据存储类型类型不是字符型(!="str")的`v',
创建两个新的变量;
==========================================================================