多谢多谢作者: 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]