楼主: 白塔湖123
3245 8

[问答] 求问SAS中如何对不同行设置不同的有效小数位数,感谢! [推广有奖]

  • 2关注
  • 6粉丝

已卖:2138份资源

教授

1%

还不是VIP/贵宾

-

威望
0
论坛币
22330 个
通用积分
2.8031
学术水平
3 点
热心指数
20 点
信用等级
3 点
经验
5284 点
帖子
286
精华
0
在线时间
1683 小时
注册时间
2012-9-20
最后登录
2025-11-21

楼主
白塔湖123 发表于 2017-8-8 22:56:19 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
11微信截图_20170808224453.png
请问大家一下,我的数据集如图所示,

我想对第2,4,6,8行最右边4列变量的数值保留2位有效小数。
而对第1,3,5,7,9行,我希望把右边4列变量的数值先全部乘以100,然后保留3位有效小数

请问大家如何实现?可以用数组或者矩阵来实现吗?或者有其他简单方法也可以的!

数据集我也放上来了,谢谢大家!

testdata.zip (38.54 KB)
二维码

扫码加我 拉你入群

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

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

关键词:简单方法 如何实现 如图所示 数据集

回帖推荐

wwang111 发表于5楼  查看完整内容

try this: data wanted; set test; array var[4] _numeric_; array num[4] $10 num1-num4; if x='t' then do i=1 to 4; num=put(var,8.2-l); end; else do j=1 to 4; num[j]=put(var[j]*100,8.3-l); end; keep x num:; run;

l1i2n3i4n5g 发表于4楼  查看完整内容

data test1; set test; array old[4] _numeric_; array new[4] $10.; do i=1 to 4; if x='t' then new=put(old,10.2); else new=put(old*100,10.3); end; run; proc print data=test1; run;

沙发
Shirleylsr 发表于 2017-8-8 23:08:36
先根据单双生成不同的数据数据集,然后分别把数据集转置
对于不同的变量进行不同的设置;
最后合成一个数据集
只不过跟现在的区别是,现在的观测成为了变量

(ps一般观测是行,这个变量放在行……看着还是挺别扭的)

藤椅
白塔湖123 发表于 2017-8-8 23:44:30
Shirleylsr 发表于 2017-8-8 23:08
先根据单双生成不同的数据数据集,然后分别把数据集转置
对于不同的变量进行不同的设置;
最后合成一个数 ...
请问你知道这个能不能拿数组或者矩阵来做吗?你说的这个方法我知道,但是因为行数实在太多了,这么弄不是很方便,只是我截取了9行方便大家讨论test,所以才想问大家能不能用数组或者矩阵来做,这样可能会好弄一些

板凳
l1i2n3i4n5g 在职认证  发表于 2017-8-9 09:04:16
data test1;
        set test;
        array old[4] _numeric_;
        array new[4] $10.;
        do i=1 to 4;
                if x='t' then new=put(old,10.2);
                else  new=put(old*100,10.3);
        end;
run;
proc print data=test1;
run;

报纸
wwang111 发表于 2017-8-9 09:25:01
try this:

data wanted;
set test;
array var[4] _numeric_;
array num[4] $10 num1-num4;
if x='t' then do i=1 to 4;
  num=put(var,8.2-l);
end;
else do j=1 to 4;
  num[j]=put(var[j]*100,8.3-l);
end;
keep x num:;
run;

地板
白塔湖123 发表于 2017-8-9 13:38:48
感谢大家!

7
latin小刺猬 学生认证  发表于 2017-8-9 15:26:27 来自手机
用数组就可以

8
白塔湖123 发表于 2017-8-9 16:13:16
wwang111 发表于 2017-8-9 09:25
try this:

data wanted;
抱歉,再请教一下,这个为什么会报错说非法引用数组啊?

33295  data wanted;
33296  set test;
33297  array var[4] _numeric_;
33298  array num[4] $10 num1-num4;
33299  if x='t' then do i=1 to 4;
33300    num=put(var,8.2-l);
ERROR: 非法引用数组“var”。
ERROR: 非法引用数组“num”。
33301  end;
33302  else do j=1 to 4;
33303    num[j]=put(var[j]*100,8.3-l);
33304  end;
33305  keep x num:;
33306  run;

NOTE: 由于出错,SAS 系统停止处理该步。
WARNING: 数据集 WORK.WANTED 可能不完整。该步停止时,共有 0 个观测和 5 个变量。
WARNING: 数据集 WORK.WANTED 由于该步已停止,而没有被替换。
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间          0.01 秒
      CPU 时间          0.03 秒

9
wwang111 发表于 2017-8-9 17:26:47
白塔湖123 发表于 2017-8-9 16:13
抱歉,再请教一下,这个为什么会报错说非法引用数组啊?

33295  data wanted
可能是显示的问题,num=put(var,8.2-l);这里,num后面应该有一个 i 包括在中括号里面

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 17:23