楼主: ENNAF
29638 12

[编程问题求助] 关于STATA中的小于等于号 [推广有奖]

  • 0关注
  • 0粉丝

硕士生

79%

还不是VIP/贵宾

-

威望
0
论坛币
10 个
通用积分
1.9528
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
471 点
帖子
56
精华
0
在线时间
307 小时
注册时间
2016-1-7
最后登录
2025-12-19

楼主
ENNAF 发表于 2019-9-24 11:11:03 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input long id float a
  4. 483283  .1
  5. 483283 .05
  6. 483283  .2
  7. end
复制代码
我想对483283的a进行分类,小于等于0.1且大于0.02的是一类,大于0.1的是一类,代码如下:
gen b=1
replace b=2 if a<=0.1 & a>0.02
list
但是运行完之后发现0.1不属于小于等于0.1,

想请教一下是我代码写错了吗?应该怎么写呢?
二维码

扫码加我 拉你入群

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

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

关键词:Stata tata generated generate install

1.png (5.85 KB)

1.png

回帖推荐

acs495628 发表于2楼  查看完整内容

浮点数并不是一个精确的数字,而是一个无限近似的数字,你在stata中看到的float 型的变量a 的其中一个观察值0.1只是一个显示的数字,比如x=0.1,用2进制表示是个无限循环的2进制数(0.0000100010001..........),用2进制无法精确表示0.1,所以你在判断的时候出现此种情况,代码并没有写错,建议你在设置变量a的类型的时候设置a为长整型long

蓝色 发表于10楼  查看完整内容

沙发
acs495628 发表于 2019-9-24 16:53:48
浮点数并不是一个精确的数字,而是一个无限近似的数字,你在stata中看到的float 型的变量a 的其中一个观察值0.1只是一个显示的数字,比如x=0.1,用2进制表示是个无限循环的2进制数(0.0000100010001..........),用2进制无法精确表示0.1,所以你在判断的时候出现此种情况,代码并没有写错,建议你在设置变量a的类型的时候设置a为长整型long
已有 1 人评分论坛币 学术水平 热心指数 收起 理由
admin_kefu + 30 + 3 + 3 热心帮助其他会员

总评分: 论坛币 + 30  学术水平 + 3  热心指数 + 3   查看全部评分

藤椅
ENNAF 发表于 2019-9-24 19:02:00
acs495628 发表于 2019-9-24 16:53
浮点数并不是一个精确的数字,而是一个无限近似的数字,你在stata中看到的float 型的变量a 的其中一个观察值 ...
感谢回复,我试了改成long之后a全变成0了,改成double之后结果和float的一样...

板凳
蓝色 发表于 2019-9-24 19:52:00
  1. . * Example generated by -dataex-. To install: ssc install dataex
  2. . clear

  3. . input long id double a

  4.                id           a
  5.   1. 483283  .1
  6.   2. 483283 .05
  7.   3. 483283  .2
  8.   4. end

  9. . gen b=1

  10. . replace b=2 if a<=0.1 & a>0.02
  11. (2 real changes made)

  12. . list

  13.      +------------------+
  14.      |     id     a   b |
  15.      |------------------|
  16.   1. | 483283    .1   2 |
  17.   2. | 483283   .05   2 |
  18.   3. | 483283    .2   1 |
  19.      +------------------+
复制代码
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
tao20220702 + 1 + 1 + 1 精彩帖子
admin_kefu + 30 + 3 + 3 热心帮助其他会员

总评分: 论坛币 + 30  学术水平 + 4  热心指数 + 4  信用等级 + 1   查看全部评分

报纸
蓝色 发表于 2019-9-24 19:52:56
double没有问题

地板
ENNAF 发表于 2019-9-25 11:58:32
蓝色 发表于 2019-9-24 19:52
请教一下:我复制了你的代码运行后显示 cannot be read as a number ,请问一下你运行时没有这个问题吗?

7
ENNAF 发表于 2019-9-25 11:59:46
ENNAF 发表于 2019-9-25 11:58
请教一下:我复制了你的代码运行后显示 cannot be read as a number ,请问一下你运行时没有这个问题吗? ...

8
ENNAF 发表于 2019-9-25 12:01:23
这是我的运行截图

1.png (35.77 KB)

1.png

9
ENNAF 发表于 2019-9-25 13:53:47
蓝色 发表于 2019-9-24 19:52
double没有问题
另外,我手动输入数据并设定变量为double确实可以了但如果用recast double a, force,结果还和float一样。请问一下在初始导入时变量就是float的情况下,有办法转float为double并且还能得到想要的结果吗?
  1. . insheet using e:\STATA\练习\iii.csv
  2. (2 vars, 3 obs)

  3. . recast double a, force

  4. . list

  5.      +--------------+
  6.      |     id     a |
  7.      |--------------|
  8.   1. | 483283    .1 |
  9.   2. | 483283   .05 |
  10.   3. | 483283    .2 |
  11.      +--------------+

  12. . gen b=1

  13. . replace b=2 if a<=0.1 & a>0.02
  14. (1 real change made)

  15. . list

  16.      +------------------+
  17.      |     id     a   b |
  18.      |------------------|
  19.   1. | 483283    .1   1 |
  20.   2. | 483283   .05   2 |
  21.   3. | 483283    .2   1 |
复制代码

10
蓝色 发表于 2019-9-25 14:26:03
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input long id float a
  4. 483283  .1
  5. 483283 .05
  6. 483283  .2
  7. end

  8. tostring a,usedisplayformat replace force
  9. destring a,replace

  10. gen b=1
  11. replace b=2 if a<=0.1 & a>0.02

  12. list
复制代码


  1. . * Example generated by -dataex-. To install: ssc install dataex
  2. . clear

  3. . input long id float a

  4.                id          a
  5.   1. 483283  .1
  6.   2. 483283 .05
  7.   3. 483283  .2
  8.   4. end

  9. .
  10. . tostring a,usedisplayformat replace force
  11. a was float now str3
  12. a was forced to string; some loss of information

  13. . destring a,replace
  14. a: all characters numeric; replaced as double

  15. .
  16. . gen b=1

  17. . replace b=2 if a<=0.1 & a>0.02
  18. (2 real changes made)

  19. .
  20. . list

  21.      +------------------+
  22.      |     id     a   b |
  23.      |------------------|
  24.   1. | 483283    .1   2 |
  25.   2. | 483283   .05   2 |
  26.   3. | 483283    .2   1 |
  27.      +------------------+
复制代码

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

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