全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2642 5
2015-07-06
悬赏 5 个论坛币 未解决
SAS小白求各位高手指导,我的基础数据如下:
indcd year X
a 20081
a 2009 2
a 2010 3
a 2011 4
a 2012 5
b2009 2
b 2010 3
b 2011 4
b 2012 5
...
我希望对于每一个indcd,计算当年和前2年(共3年)的X总和sum和均值avg。如对于indcd=a时,2010sum为6(1+2+3),2011sum为9(2+3+4)和2012sum为12(3+4+5)。
因为对于每一个Indcd,对应的year个数可能不同,有的是从2008-2012年,有的则是2009-2012年。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2015-7-6 14:15:22
data one;
input indcd $ year x;
cards;
a        2008        1
a        2009        2
a        2011        4
a        2010        3
a        2012        5
b        2010        3
b        2009        2
b        2011        4
b        2012        5
;;;
run;
data two;
set one;
by indcd;

if first.indcd then count=0;
count+1;
sum=x+lag(x)+lag2(x);

if count>=3 then sum=sum;
else sum=.;
mean=sum/3;

drop count;
run;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-7-6 16:04:29
复制代码
此处考虑:一个indcd、一个year下只有一个X
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-7-6 20:54:49
复制代码
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-7-7 20:29:40
proc sort data=test;
        by indcd year;
run;
data test1;
        set test;
        by indcd year;
        if first.indcd then n=1;
                else n+1;
        sum1=lag(x)+x;
        sum2=lag(sum1)+x;
        if n=1 or n=2 then
                do;
                        sum1=.;
                        sum2=.;
                end;
        drop n sum1;
run;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-7-7 20:33:21
huangpengfei 发表于 2015-7-7 20:29
proc sort data=test;
        by indcd year;
run;
data test1;
        set test;
        by indcd year;
        if first.indcd then n=1;
                else n+1;
        sum=lag(x)+lag2(x)+x;
        if n=1 or n=2 then
                do;
                        sum=.;
                end;
        drop n ;
run;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群