【发布时间】:2014-08-24 12:57:24
【问题描述】:
我正在尝试在 Stata 中编写一个foreach 循环,它将自动生成数据集中所有连续变量(不包括字符串、二进制变量)的日志转换。我尝试过的代码似乎不起作用如下:
qui foreach v of varlist _all {
gen 'v' = log(v)
}
此外,我想编写一个循环来生成交互项的所有可能排列,但不知道如何处理。
【问题讨论】:
标签: statistics stata
我正在尝试在 Stata 中编写一个foreach 循环,它将自动生成数据集中所有连续变量(不包括字符串、二进制变量)的日志转换。我尝试过的代码似乎不起作用如下:
qui foreach v of varlist _all {
gen 'v' = log(v)
}
此外,我想编写一个循环来生成交互项的所有可能排列,但不知道如何处理。
【问题讨论】:
标签: statistics stata
几个问题:
如果你使用_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))继续阅读。
【讨论】:
gen lv'=log(v'+1).
gen l`v'=log(`v'+1)。我假设原始海报将正确处理他的问题的数学。为了完整起见,如果指示 Stata 记录一个非正数的日志,它将产生一个缺失的 (.)。
tuples。