楼主: yunhan222
1621 4

[其他] 求助大佬 stata中产生绝对值最小的值 [推广有奖]

  • 0关注
  • 0粉丝

小学生

50%

还不是VIP/贵宾

-

威望
0
论坛币
30 个
通用积分
0.3750
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
123 点
帖子
5
精华
0
在线时间
3 小时
注册时间
2022-4-7
最后登录
2025-9-21

楼主
yunhan222 发表于 2022-4-22 07:46:50 来自手机 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
比如说有一下数据<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>
(我知道如何产生最小值,但是要绝对值最小,那正负号怎么还原呢?)
二维码

扫码加我 拉你入群

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

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

关键词:Stata tata 绝对值 最小值

沙发
zdlspace 学生认证  发表于 2022-4-22 17:46:50
  1. gen min=.
  2. gen min_abs=.

  3.   forvalues i=1/4{
  4.      gen var`i'_abs=abs(var`i')
  5.      replace min=var`i' if var`i'_abs<min_abs
  6.      replace min_abs=var`i'_abs if var`i'_abs<min_abs
  7.   }
  8. keep var1-min
复制代码

藤椅
pengxhan 发表于 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 建议:
  1. reshape long v, i(id)
  2. gen wanted = abs(v)
  3. by id (wanted), sort: replace wanted = v[1]
  4. reshape wide
复制代码
更重要地,还有一个问题。 假设我们有 v1 = 1,v2 = -1,v3 = 5。那么 v1 和 v2 的绝对值都最小,即 1。但是不清楚 x 应该是 1 还是 -1,以及如何决定。 (上面的代码会随机且不可重现地打破平局。)
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Studio-R + 5 + 5 + 5 精彩帖子

总评分: 学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

报纸
赵安豆 发表于 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学术大模型生成,添加下方二维码,优先体验功能试用



您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-28 06:25