楼主: dxystata
3053 10

[问答] 找出小数点位数 [推广有奖]

版主

大师

34%

还不是VIP/贵宾

-

TA的文库  其他...

Software

中英文Ebook

R学习

威望
2
论坛币
182306 个
通用积分
15205.2831
学术水平
208 点
热心指数
271 点
信用等级
174 点
经验
291005 点
帖子
5371
精华
1
在线时间
13476 小时
注册时间
2006-6-21
最后登录
2024-4-24

初级学术勋章 初级热心勋章 中级热心勋章 初级信用勋章

15论坛币
  1. data aaa;
  2. input x;
  3. cards;
  4. 1
  5. 1.1
  6. 2.22
  7. 3.1415
  8. 13.141
  9. 110.1
  10. ;
  11. run;
复制代码

先根据程序自动得到数据集aaa中x的小数点位数,结果是4,再将其放入宏变量。
程序如何实现?

最佳答案

l1i2n3i4n5g 查看完整内容

proc sql; select max(length(scan(put(x,best12.),2))) into : result from aaa; quit;
关键词:小数点 cards Input card 如何实现
沙发
l1i2n3i4n5g 在职认证  发表于 2019-3-19 07:15:50 |只看作者 |坛友微信交流群
proc sql;
   select max(length(scan(put(x,best12.),2))) into : result
   from aaa;
quit;
已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
admin_kefu + 10 + 2 + 2 + 2 热心帮助其他会员
dxystata + 100 + 1 + 1 热心帮助其他会员

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

使用道具

藤椅
zy_4613 发表于 2019-3-19 08:40:05 |只看作者 |坛友微信交流群
data aaa;
input x;
cards;
1
1.1
2.22
3.1415
13.141
110.1
;
run;
data bbb;
        set aaa;
        y=int(x);
        if x=y then z=0;
        else z=sum(length(compress(int(x))),1);
run;
得到小数点的位置,但是不太明白,放入宏变量是什么意思。
data _null_;
        set bbb;
        call execute('%test('||z||')');
run;
是需要这样吗?
已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
admin_kefu + 20 + 2 + 2 + 2 热心帮助其他会员
dxystata + 100 + 1 + 1 热心帮助其他会员

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

使用道具

板凳
dxystata 发表于 2019-3-19 08:51:55 |只看作者 |坛友微信交流群
zy_4613 发表于 2019-3-19 08:40
data aaa;
input x;
cards;
我希望找出变量取值中小数点位数最多的位数是多少

使用道具

报纸
zy_4613 发表于 2019-3-19 09:08:56 |只看作者 |坛友微信交流群
dxystata 发表于 2019-3-19 08:51
我希望找出变量取值中小数点位数最多的位数是多少
data aaa;
input x;
cards;
1
1.1
2.22
3.1415
13.141
110.1
;
run;
data bbb;
        set aaa;
        y=sum(x,-int(x));
        z=sum(length(compress(y)),-2);
run;
proc sql;
        select max(z) into: macro_name from bbb;
quit;
第一次弄错了

使用道具

地板
xiaopingN 发表于 2019-3-19 10:16:19 |只看作者 |坛友微信交流群
l1i2n3i4n5g 发表于 2019-3-19 09:33
proc sql;
   select max(length(scan(put(x,best12.),2))) into : result
   from aaa;
proc sql;
   select max(length(scan(x,2, "."))) into : result
   from aaa;
quit;
反正SAS会在数字和字符自动转换
已有 1 人评分经验 学术水平 热心指数 收起 理由
dxystata + 100 + 1 + 1 热心帮助其他会员

总评分: 经验 + 100  学术水平 + 1  热心指数 + 1   查看全部评分

使用道具

7
xiaopingN 发表于 2019-3-19 21:52:33 |只看作者 |坛友微信交流群
看来还没达到楼主要求。再努力一下:
Data bbb;
set aaa;y=scan(x,2, ".");
if y=" " then decimal=0;
else decimal=length(scan(x,2, "."));
drop y;
run;
Decimal 就是数据aaa 中变量x的小数点位数。


Proc sql ;
select max(decimal) into :MaxDecimal
from bbb;
quit;
%put the maximum decimal is %left(&MaxDecimal);


最后用%put 把宏变量MaxDecimal的值写到SAS log:

the maximum decimal is 4

已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
admin_kefu + 20 + 2 + 2 + 2 热心帮助其他会员
dxystata + 100 + 1 + 1 热心帮助其他会员

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

使用道具

8
dxystata 发表于 2019-3-20 06:52:43 |只看作者 |坛友微信交流群
谢谢各位!

使用道具

9
挞挞 发表于 2019-3-20 16:20:38 |只看作者 |坛友微信交流群
data aaa;
        set aaa;
        num=length(strip(x))-length(strip(scan(x,1,".")))-1;
        if num<0 then num=0;
run;
proc sql noprint;
        select max(num) into:num from aaa;
quit;
%put &num.;
已有 1 人评分经验 学术水平 热心指数 收起 理由
dxystata + 100 + 1 + 1 好的意见建议

总评分: 经验 + 100  学术水平 + 1  热心指数 + 1   查看全部评分

使用道具

10
dxystata 发表于 2019-4-11 21:26:11 |只看作者 |坛友微信交流群
l1i2n3i4n5g 发表于 2019-3-19 07:15
proc sql;
   select max(length(scan(put(x,best12.),2))) into : result
   from aaa;
data aaa;
input x;
cards;
11
111
;
run;
dec的结果应该是0,结果出错哦!

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-24 21:21