生成Stata +交互中所有连续变量的对数转换

时间:2014-08-24 12:57:25

标签: statistics stata

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

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

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

1 个答案:

答案 0 :(得分:5)

几个问题:

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

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

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

  4. 您错过log(`v')中的引号。

  5. 尝试更像

    的内容
    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)等存储结果。