SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1395|回复: 2
打印 上一主题 下一主题

请教一个数据处理问题

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2013-7-5 15:28:37 | 只看该作者

请教一个数据处理问题

比如有一个测试数据集如下:
id   seq   var  value
10   1      A      
10   2      A
10   3      A
10   4      B     100
10   5      B     200
10   6      B     300
10   7      A
10   8      A
10   9      B    20
10  10     B    30

我想输出如下:
id   seq   var  value
10   1      A      
10   2      A
10   3      A
10   6      B     600
10   7      A
10   8      A
10  10     B    50

逻辑就是:如果var=A,则全部输出,如果var=B,则计算累加后输出最后一条记录,请问如何实现?多谢大侠帮助!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2013-7-5 15:46:18 | 只看该作者

Re: 请教一个数据处理问题

[code:sbe7khq9]data raw;
    infile datalines missover;
    input id seq var $ value;
datalines;
10 1 A
10 2 A
10 3 A
10 4 B 100
10 5 B 200
10 6 B 300
10 7 A
10 8 A
10 9 B 20
10 10 B 30
;
data out(drop=sum);
    sum=0;
    do _n_=1 by 1 until(last.var);
        set raw;
        by var notsorted;
        sum+value;
        if var='A' then output;
    end;
    if var='B' then do;
        value=sum; output;
    end;
run;[/code:sbe7khq9]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2013-7-5 16:52:46 | 只看该作者

Re: 请教一个数据处理问题

data out;

    retain sum;

        set raw;
        by var notsorted;
        if first.var then sum=value;
        else sum=sum+value;

if var='A' then output;
if last.var then if var='B' then output;
run;

proc print;run;
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-2 18:29 , Processed in 0.142631 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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