楼主: 你雷我也雷
4086 2

怎么让缺省值取前一期的值,自己retain的是按行排列的前面一个值 [推广有奖]

  • 4关注
  • 2粉丝

高中生

92%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
1 点
信用等级
0 点
经验
202 点
帖子
18
精华
0
在线时间
52 小时
注册时间
2012-3-11
最后登录
2016-8-12

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
自己代码:
data a;
input clsprc1 clsprc2 clsprc3;
cards;
1 3 5
. . .
2 5 6
;
data result;
set a;
array clsprc _numeric_;


retain temp;
do over clsprc;
if ^missing(clsprc) then temp=clsprc;
else   clsprc=temp;
drop temp;
end;
run;
a数据集:
clsprc1 clsprc2 clsprc3
1 1 3 5
2 . . .
3 2 5 6
想要的结果:result数据集
clsprc1 clsprc2clsprc3
1 1 3 5
2 1 3 5
3 2 5 6
现在运行的结果:
clsprc1 clsprc2 clsprc3
1 1 3 5
2 5 5 5
3 2 5 6
我知道retain能复制之前的值,不过我想要的同列前一列的,而不是逐行排列的前一期,自己也是受这篇帖子的启发编写的,
https://bbs.pinggu.org/thread-1317109-1-1.html
这里就是按同列前一行复制的,可能里面用了format和informat吧,但是我这里全是数字,应该也没什么用,自己也想用循环语句,但是想不出其中的嵌套 ,希望各位帮忙。
二维码

扫码加我 拉你入群

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

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

关键词:RETAIN RET ETA 缺省值 informat sas retain 缺省值 补充

沙发
mingfeng07 学生认证  发表于 2014-8-28 11:21:37 |只看作者 |坛友微信交流群
跟format和informat没关系,主要是需要理解retain语句的含义。retain语句指的是保留你执行的上一次赋值,你如果用数组,必然会得到你上一次也就是第(i-1)次执行的值,而不是同一列的前一列。

使用道具

藤椅
你雷我也雷 学生认证  发表于 2014-8-28 16:56:17 |只看作者 |坛友微信交流群
嗯嗯,我也是这么想的,array相当于把这些数据存成了二维矩阵,是按行从上到下读取的。折腾了一晚上和大半天,终于还是从以前的帖子中找到了思路,可以用proc timeseries用前期的数据补齐缺省值。
也就是下面这篇帖子@playmore大大说的,稍作修改
https://bbs.pinggu.org/thread-2266426-1-1.html
另附proc timeseries 关于缺失值的处理STATEMENT文件:
http://support.sas.com/documenta ... eseries_sect016.htm
(自己可以点开其他的说明)

使用道具

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

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

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

GMT+8, 2024-5-11 00:10