SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1258|回复: 6
打印 上一主题 下一主题

sas求和问题

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2008-11-2 19:20:33 | 只看该作者

sas求和问题

学习sas,一头雾水,请指教:

id x
001 5
001 4
001 3
002 2
002 1
002 2
002 3

请问哪问高人如何将以上数据的计算出一个新变量如下

id x y
001 5 12
001 4 7
001 3 3
002 2 8
002 1 6
002 2 5
002 3 3
就是对每个id,第一次Y要求计算出x的所有和,id的第二行,计算从第二行到此id最后一个记录x 的和,依次类推,谢谢
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2008-11-2 22:38:26 | 只看该作者

Re: sas求和问题

is it an exercise?
<!-- m --><a class="postlink" href="http://sasor.feoh.net/viewtopic.php?f=1&amp;t=4081">http://sasor.feoh.net/viewtopic.php?f=1&amp;t=4081</a><!-- m -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2008-11-2 22:39:39 | 只看该作者

Re: sas求和问题

data te;
        set tmp;
        retain s 0 LstID ;
        if _n_ = 1 then LstID = id;
        if LstID = id then s = x + s;
        else        s = x;
       
        LstID = id;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2008-11-5 16:05:33 | 只看该作者

Re: sas求和问题

楼上的方法计算结果好像倒过来了,我也很想知道如按一楼的要求如何计算,请高人指点。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2008-11-5 16:38:00 | 只看该作者

Re: sas求和问题

data s;
input id $3. x;
datalines;
001 5
001 4
001 3
002 2
002 1
002 2
002 3
;
data s;
set s;
if id^=lag(id) then n=1;
else n+1;
run;
proc sort data=s;by id descending n;
run;
data s;
set s;
if id^=lag(id) then y=x;
else y+x;
run;
proc sort data=s;by id  n;
run;
data s;
        set s;
        drop n;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2008-11-5 16:55:06 | 只看该作者

Re: sas求和问题

谢谢
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2008-11-8 23:37:30 | 只看该作者

Re: sas求和问题

data one;
input id x;
n+1;
datalines;
001 5
001 4
001 3
002 2
002 1
002 2
002 3
;
proc sort data=one out=two;
by id descending n;
data three;
set two;
by id;
if first.id then y=0;
y+x;
proc sort data=three;
by n;
run;
我也试试
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-5 03:29 , Processed in 0.389860 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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