全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
1476 4
2022-04-22
比如说有一下数据<br>
id    v1    v2    v3      x<br>
1     -1     3     -2     -1<br>
2      2      1     -3      1<br>
3      3     -2     4      -2<br>
stata中哪个命令可以产生变量x,表示v1~v4中绝对值最小的那个值呢?<br>
(我知道如何产生最小值,但是要绝对值最小,那正负号怎么还原呢?)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2022-4-22 17:46:50
复制代码
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2022-4-22 23:23:34
gen min=.
forvalues i=1/3 {
        gen v`i'_abs=abs(v`i')
        replace min=v`i' if v`i'_abs<abs(min)
}
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2022-4-23 09:12:56
Clyde Schechter 建议:
复制代码
更重要地,还有一个问题。 假设我们有 v1 = 1,v2 = -1,v3 = 5。那么 v1 和 v2 的绝对值都最小,即 1。但是不清楚 x 应该是 1 还是 -1,以及如何决定。 (上面的代码会随机且不可重现地打破平局。)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2024-11-28 21:38:44
在Stata中生成一个新变量`x`来存储变量`v1`, `v2`, 和 `v3` 中的绝对值最小的那个值(同时保留其原始符号),可以采用以下步骤:

首先,创建三个新的变量来分别储存`v1`, `v2`, 和 `v3` 的绝对值。

```stata
gen abs_v1 = abs(v1)
gen abs_v2 = abs(v2)
gen abs_v3 = abs(v3)
```

然后找到这些绝对值中最小的一个,同时保留其符号。这可以通过比较绝对值大小,并使用条件语句来判断原始的数值是正还是负。

```stata
egen min_abs, min(abs_v1 abs_v2 abs_v3)

gen x = .
replace x = v1 if (min_abs == abs_v1)
replace x = v2 if (min_abs == abs_v2) & (missing(x))
replace x = v3 if (min_abs == abs_v3) & (missing(x))
```

这里的逻辑是:首先,通过`egen`命令的`min()`函数找到三个绝对值中的最小值,并将其存储在新变量`min_abs`中。然后使用`gen`和`replace`来填充变量`x`。

如果`min_abs`等于某个变量(如`v1`)的绝对值,则将`x`设为该原始数值。通过`if (missing(x))`条件确保每个观察值只被赋值一次,避免覆盖已经找到最小绝对值的情况。

这种方法可以正确地处理正数和负数,并返回它们各自的符号,同时选择绝对值最小的那个数字作为结果。

此文本由CAIE学术大模型生成,添加下方二维码,优先体验功能试用



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群