使用“foreach”转换变量
Transforming variables using ‘foreach’
我有一组变量。我想按如下方式转换此集合 (‘y’) 中的每个变量:y’ = (y-min(y))(max(y)-min(y))。也就是说,对于每个变量的每次观察,我想减去该变量的最小值,然后将结果除以该变量的最大值和最小值之间的差值。
我想使用 foreach
通过循环实现此功能,但如上编码(使用 min()
和 max()
函数)会产生一条错误消息。有没有其他选择?还是必须手动完成?
您应该能够适应下面的示例。命令 summarize
将公式中需要的值存储在返回的 r()
值中。
sysuse auto
local vars price mpg weight length
foreach var of local vars {
summarize `var'
replace `var' = (`var' - r(min)) / (r(max) - r(min))
}
问题中没有数据示例,也没有任何变量名称的指示。这是一个示例,您可以 运行.
sysuse auto, clear
ds, has(type numeric)
foreach v in `r(varlist)' {
su `v', meanonly
gen `v'_scaled = (`v' - r(min)) / (r(max) - r(min))
}
su *scaled
Variable | Obs Mean Std. Dev. Min Max
-------------+---------------------------------------------------------
price_scaled | 74 .2278444 .2338086 0 1
mpg_scaled | 74 .3205965 .1995001 0 1
rep78_scaled | 69 .6014493 .2474831 0 1
headroom_s~d | 74 .4266409 .2417128 0 1
trunk_scaled | 74 .4864865 .2376336 0 1
-------------+---------------------------------------------------------
weight_sca~d | 74 .4089154 .2523356 0 1
length_sca~d | 74 .504752 .2446851 0 1
turn_scaled | 74 .4324324 .2199677 0 1
displaceme~d | 74 .3418997 .2654255 0 1
gear_ratio~d | 74 .4852146 .2684042 0 1
-------------+---------------------------------------------------------
foreign_sc~d | 74 .2972973 .4601885 0 1
Stata 中的函数 min()
和 max()
需要两个或多个参数,并且在任何情况下都是按行操作的。它们不会产生变量的最小值和最大值。您可以使用 egen
但循环的直接路由和调用 summarize
更可取。请注意,尽管名称如此,meanonly
选项确实会产生最小值和最大值。
我有一组变量。我想按如下方式转换此集合 (‘y’) 中的每个变量:y’ = (y-min(y))(max(y)-min(y))。也就是说,对于每个变量的每次观察,我想减去该变量的最小值,然后将结果除以该变量的最大值和最小值之间的差值。
我想使用 foreach
通过循环实现此功能,但如上编码(使用 min()
和 max()
函数)会产生一条错误消息。有没有其他选择?还是必须手动完成?
您应该能够适应下面的示例。命令 summarize
将公式中需要的值存储在返回的 r()
值中。
sysuse auto
local vars price mpg weight length
foreach var of local vars {
summarize `var'
replace `var' = (`var' - r(min)) / (r(max) - r(min))
}
问题中没有数据示例,也没有任何变量名称的指示。这是一个示例,您可以 运行.
sysuse auto, clear
ds, has(type numeric)
foreach v in `r(varlist)' {
su `v', meanonly
gen `v'_scaled = (`v' - r(min)) / (r(max) - r(min))
}
su *scaled
Variable | Obs Mean Std. Dev. Min Max
-------------+---------------------------------------------------------
price_scaled | 74 .2278444 .2338086 0 1
mpg_scaled | 74 .3205965 .1995001 0 1
rep78_scaled | 69 .6014493 .2474831 0 1
headroom_s~d | 74 .4266409 .2417128 0 1
trunk_scaled | 74 .4864865 .2376336 0 1
-------------+---------------------------------------------------------
weight_sca~d | 74 .4089154 .2523356 0 1
length_sca~d | 74 .504752 .2446851 0 1
turn_scaled | 74 .4324324 .2199677 0 1
displaceme~d | 74 .3418997 .2654255 0 1
gear_ratio~d | 74 .4852146 .2684042 0 1
-------------+---------------------------------------------------------
foreign_sc~d | 74 .2972973 .4601885 0 1
Stata 中的函数 min()
和 max()
需要两个或多个参数,并且在任何情况下都是按行操作的。它们不会产生变量的最小值和最大值。您可以使用 egen
但循环的直接路由和调用 summarize
更可取。请注意,尽管名称如此,meanonly
选项确实会产生最小值和最大值。