我试图在Stata中编写一个foreach
循环,它将自动生成数据集中所有连续变量的日志转换(排除字符串,二进制变量)。我尝试过的代码似乎不起作用如下:
qui foreach v of varlist _all {
gen 'v' = log(v)
}
此外,我想编写一个循环,它将生成所有可能的交互项排列,但我不知道如何处理这个问题。
答案 0 :(得分:5)
几个问题:
如果使用_all
并且具有字符串类型变量,则循环将失败。您不能记录字符串变量的日志。这将导致类型不匹配错误,因此请使用ds
恢复数字变量列表。
您有gen 'v'
,它应该是gen `v'
。请注意所用报价类型的细微差别。
您不能generate
已存在的变量。因此,例如,将前缀l
附加到新变量名称:gen l`v'
。
您错过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)
等存储结果。