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

use*_*021 0 statistics stata

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

qui foreach v of varlist _all {
    gen 'v' = log(v)
}
Run Code Online (Sandbox Code Playgroud)

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

Rob*_*rer 5

几个问题:

  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')
}
Run Code Online (Sandbox Code Playgroud)

这不会保护您不要记录指标变量(如foreign示例中)或非正值(这将导致缺失(.)).

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

<snip>

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

<snip>
Run Code Online (Sandbox Code Playgroud)

此代码将省略指示符变量foreign.

请参阅help return阅读使用存储的结果,如r(varlist).