全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2949 10
2011-07-29
正在学习sas,做了这么一个计算:
64   data a;
65   x=substr(put(123456789012345678,best18.),1);
66   put x=;
67   run;

x=123456789012345680
结果出乎意料,不知道怎么回事,望各位达人赐教

还有,如果不用put先转为文本,直接在substr里面用数字,超过12位会被转为科学计数法表示,有没有什么办法不转,比如上面的x,如果substr(123456789012345678,6,4)能得到6789
二维码

扫码加我 拉你入群

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

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

全部回复
2011-7-29 17:47:22
这个不是put的问题。
substr函数是对字符串操作的,当他作用与数值型数据时,会将数值型自动转换成字符型(best.).
所以此例中如果要得到“6789”, 应该进行显示转换(put函数)

data a;
   x=substr(put(123456789012345678,best18.),6,4);
   put x=;
run;
二维码

扫码加我 拉你入群

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

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

2011-8-1 10:14:47
pobel 发表于 2011-7-29 17:47
这个不是put的问题。
substr函数是对字符串操作的,当他作用与数值型数据时,会将数值型自动转换成字符型( ...
呵呵,先感谢你的回答(你是对我第二个问题做了解答吧)。不用put做转换的话,其实sas会自己转,但是会转为科学计数法表示的,我想知道能否不用put的话,是否有什么办法不转为科学计数法表示
二维码

扫码加我 拉你入群

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

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

2011-8-1 13:40:45
xiaoqiu917 发表于 2011-8-1 10:14
呵呵,先感谢你的回答(你是对我第二个问题做了解答吧)。不用put做转换的话,其实sas会自己转,但是会 ...
下面的方法可以不用put函数

data a;
  length num_c $20;
  num=123456789012345678;
  num_c=num;
   x=substr(left(num_c),6,4);
   put x=;
run;


对于你的第一个问题,也是由substr()函数规则所致。substr函数有三个参数,如果省略第三个参数,则sas将取出第二个参数值(此例中是1)开始的所有剩余字符。

希望表达清楚了。
二维码

扫码加我 拉你入群

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

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

2011-8-2 10:48:38
我试了一下pobel的程序,结果出来的也是123456789012345680. 所以我觉得应该是数值型变量储存位数的限制吧。我改变了一下位数,发现:
1. 超过16位后,数据存贮出现误差
2. 16位之后的数据不按照原来数值存贮,而是以8的倍数的临近值存储
二维码

扫码加我 拉你入群

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

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

2011-8-4 16:27:46
guodong1986718 发表于 2011-8-2 10:48
我试了一下pobel的程序,结果出来的也是123456789012345680. 所以我觉得应该是数值型变量储存位数的限制吧。 ...
是的,我也发现小于等于16位时没问题,郁闷啊。有个标准解答就好了。
另外,谢谢上面的几位兄弟,看来是不转文本是解决不掉第二个问题了
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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