全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
4343 2
2014-08-27
自己代码:
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吧,但是我这里全是数字,应该也没什么用,自己也想用循环语句,但是想不出其中的嵌套 ,希望各位帮忙。
二维码

扫码加我 拉你入群

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

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

全部回复
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
(自己可以点开其他的说明)
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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