【问题标题】:Generate log transformation of all continuous variables in Stata + interactions在Stata +交互中生成所有连续变量的对数转换
【发布时间】:2014-08-24 12:57:24
【问题描述】:

我正在尝试在 Stata 中编写一个foreach 循环,它将自动生成数据集中所有连续变量(不包括字符串、二进制变量)的日志转换。我尝试过的代码似乎不起作用如下:

qui foreach v of varlist _all {
    gen 'v' = log(v)
}

此外,我想编写一个循环来生成交互项的所有可能排列,但不知道如何处理。

【问题讨论】:

    标签: statistics stata


    【解决方案1】:

    几个问题:

    1. 如果你使用_all 并且有字符串类型的变量,那么循环将会失败。您不能记录字符串变量的日志。这将导致类型不匹配错误,因此请使用ds 恢复数字变量列表。

    2. 你有gen 'v',它应该是gen `v'。请注意所使用的报价类型的细微差别。

    3. 您不能generate 已存在的变量。因此,例如,将前缀 l 附加到新变量名称:gen l`v'

    4. 您缺少log(`v') 中的引号。

    尝试类似的东西

    clear all
    set more off
    
    sysuse auto
    
    ds, has(type numeric) 
    
    quietly foreach v of varlist `r(varlist)' {
        gen l`v' = log(`v')
    }
    

    这不会防止您记录指标变量(如示例中的 foreign)或非正值(这将导致缺失 (.)。

    如果我们假设带有值标签 (help label) 的变量是非连续变量,那么您可以进一步过滤变量列表:

    <snip>
    
    ds, has(type numeric) 
    ds `r(varlist)', not(vallabel)
    
    <snip>
    

    此代码将省略指标变量foreign

    请参阅help return 以使用存储的结果(如r(varlist))继续阅读。

    【讨论】:

    • 假设连续变量具有非负值,安全的方法是使用gen lv'=log(v'+1).
    • 感谢@Metrics。那应该是gen l`v'=log(`v'+1)。我假设原始海报将正确处理他的问题的数学。为了完整起见,如果指示 Stata 记录一个非正数的日志,它将产生一个缺失的 (.)。
    • @Metrics log(x + 1) 不是在没有挥舞大旗的情况下例行公事的事情。这在某些领域是一种常见的伎俩,但在许多其他领域被认为是不合理的骗局。
    • 感谢尼克的建议。
    • 从 SSC 签出 tuples
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 2020-05-10
    • 1970-01-01
    相关资源
    最近更新 更多