楼主: dxystata
4588 17

[数据管理求助] levelsof 显示小数点后位数过长 [推广有奖]

11
sungmoo 发表于 2013-6-22 22:18:45
tostring pt1,replace force usedisplayformat
destring pt1,replace
levelsof pt1
这是我的方法
*如果事先不设置double type(stata默认float type),可知tostring与destring后x仍是float,仍然存在多位显示(即使x的本义是十进制的小数点后恰有一位的有限小数)
clear all
inp x
1.0
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
end
tostring x, replace u
destring x, replace
d x /*显示x属性*/
levelsof x

*当x是新生成的(非原始数据),即使x的本义仍是十进制的小数点后一位的有限小数,仍然可能多位显示(各种方法有一个根本的约束:double type仍不能杜绝这种情况)
clear all
set ob 10
set se 100
g x=int(100*uniform())/10
tostring x, replace u force
destring x, replace
levelsof x
已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
Sunknownay + 100 + 10 + 1 + 1 + 1 热心帮助其他会员
h3327156 + 1 + 1 + 1 学习

总评分: 经验 + 100  论坛币 + 10  学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

12
h3327156 发表于 2013-6-22 22:36:11
sungmoo 发表于 2013-6-22 22:18
*如果事先不设置double type(stata默认float type),可知tostring与destring后x仍是float,仍然存在多 ...
为什么那一步 tostring x, replace u  如果加了force 后

clear all
inp x
1.0
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
end
tostring x, replace force u
destring x, replace
d x

*x的属性就是double,但如果是像sungmoo作法一样【没有加force】,x的属性就是float???

先感谢版主dxystata与sungmoo的开示…

13
sungmoo 发表于 2013-6-22 22:45:37
如果是像sungmoo作法一样【没有加force】,x的属性就是float?
force有这个作用。
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
h3327156 + 1 + 1 + 1 原来如此~谢谢sungmoo

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

14
dxystata 发表于 2013-6-22 23:22:06
我的方法中后面选项用了force usedisplayformat
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
h3327156 + 1 + 1 + 1 所以我提问

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

15
h3327156 发表于 2013-6-22 23:38:46
sungmoo 发表于 2013-6-22 22:18
*如果事先不设置double type(stata默认float type),可知tostring与destring后x仍是float,仍然存在多位 ...
真的是这样。

看来,我还是以sungmoo那句
**比较保险且省事的方法是,用group()将各值转换(对应)为整数,再利用整数操作(使用levelsof)。**
为主好了!


16
hs4601 发表于 2013-12-15 16:18:44

17
hs4601 发表于 2013-12-15 16:19:11

18
peyzf 发表于 2015-8-1 12:03:50
learning~

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

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