全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
3594 8
2013-02-23
目标: 对 多个 总量指标变量 实施 对数变换(所有变量均大于等于零)
其中, 对于最小值是 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楼

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-2-23 15:31:38
你的
min 函数能用吗

你不编写循环,自己先单独试试这些函数
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-2-23 15:38:34
蓝色 发表于 2013-2-23 15:31
你的
min 函数能用吗
哦, 好的, 我试试看!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-2-23 15:40:43
蓝色 发表于 2013-2-23 15:31
你的
min 函数能用吗
蓝色版主的意思是, 下面这句可能有问题?

local s = min(`v')
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-2-23 15:43:47

sysuse auto,clear
local s=min(price)

你看看 能不能执行啊

函数你的看帮助
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-2-23 15:46:39
蓝色 发表于 2013-2-23 15:43

sysuse auto,clear
local s=min(price)
呵呵, 刚才看帮助文件了, 是不对!

有什么方法能让局部宏`s' 定义为 `v'的最小值呢?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群