离Stata多年后,我正在编辑代码,这些代码反复执行类似的操作:
egen min = min(x)
egen max = max(x)
generate xn = (x - min) / (max - min)
drop min max
我想将此代码减少到一行。但是,我想到的两种“自然”方式都不起作用。
gen x_index = (x - min(x)) / (max(x)- min(x))
egen x_index = (x - min(x)) / (max(x)- min(x))
我错过了Stata逻辑的哪些部分?
答案 0 :(得分:2)
Stata函数max()
和min()
需要两个或多个参数,并且如果给出一个变量作为任何一个参数,则按行(跨观察)操作。记录在例如help max()
。
egen
函数max()
和min()
只能在egen
次调用中使用。它们可以应用单个变量,但它们用于计算单个最大值或最小值的效率非常低,除非特别重要的是将单个结果存储在变量中。除help egen
处的警告外,已记录。
你认为这两种方法都不会变得更加迂回。考虑
su x, meanonly
gen x_index = (x - r(min)) / (r(max)- r(min))
在某些情况下,仅计算一次范围可能更有效:
su x, meanonly
scalar range = r(max) - r(min)
gen x_index = (x - r(min)) / range
在程序中,给标量赋予临时名称通常会更好。
在egen
次调用中,egen
函数只能调用一次。