SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 633|回复: 3
打印 上一主题 下一主题

一个data step的问题

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2010-9-2 00:15:56 | 只看该作者

一个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

多谢多谢
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2010-9-2 02:19:59 | 只看该作者

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;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2010-9-2 02:40:26 | 只看该作者

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;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2010-9-2 15:26:44 | 只看该作者

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]
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-3 23:49 , Processed in 0.093807 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表