SAS中文论坛

标题: 一个data step的问题 [打印本页]

作者: shiyiming    时间: 2010-9-2 00:15
标题: 一个data step的问题
不好意思,打扰问一个关于data step的问题,
有一个数据,是这样形式
data a;
input class $ n;
cards;
1 0
1 0
1 4
1 0
1 2
1 6
1 0
1 0
1 5
2 1
2 0
2 3
2 0
2 0
2 2
;
我想要把它得到的形式,也就是在同一个class中,所有的0都要变成后面第一个不是0的数字,
1 4
1 4
1 4
1 2
1 2
1 6
1 5
1 5
1 5
2 1
2 3
2 3
2 2
2 2
2 2

多谢多谢
作者: shiyiming    时间: 2010-9-2 02:19
标题: Re: 一个data step的问题
Is what you want?
data a;
input class $ n;
cards;
1 0
1 0
1 4
1 0
1 2
1 6
1 0
1 0
1 5
2 1
2 0
2 3
2 0
2 0
2 2
;
run;
data b;
set a;
retain group 1;
id=_N_;
if n^=0 then group=group+1;
run;
data c;
set b;
if n^=0 then group=group-1;
run;
proc sort data=c; by group decending n; run;
data d;
set c;
by group;
retain v;
if first.group then v=n;
else n=v;
run;
proc sort data=d; by id; run;
data e(drop=id v group);
set d;
run;
作者: shiyiming    时间: 2010-9-2 02:40
标题: Re: 一个data step的问题
data b;
set a;
id=_n_;
run;
proc sort data=b;
by decending id;
run;

data c;
set b;
retain former_n;
drop former_n;
if n ne 0 then format_n=n;
else n=former_n;
run;

proc sort data=c;
by id;
run;
作者: shiyiming    时间: 2010-9-2 15:26
标题: Re: 一个data step的问题
[code:3qsp56ko]data b(drop=temp i);
    length temp $200;
    do _n_=1 by 1 until(last.class);
        set a;
        by class;
        if lag(n)=0 and n ne 0 then temp=catx(',',temp,put(n,best.));
    end;
    i=1;
    do _n_=1 to _n_;
        set a;
        if lag(n)=0 and n ne 0 then i+1;
        n=ifn(n,n,input(scan(temp,i),best.));
        output;
    end;
run;[/code:3qsp56ko]




欢迎光临 SAS中文论坛 (https://mysas.net/forum/) Powered by Discuz! X3.2