楼主: YTH9149
2422 4

解惑 通过IF和LAG计算满足条件的平均值 [推广有奖]

  • 0关注
  • 0粉丝

学前班

60%

还不是VIP/贵宾

-

威望
0
论坛币
2970 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
33 点
帖子
2
精华
0
在线时间
1 小时
注册时间
2016-3-2
最后登录
2016-7-21

10论坛币
data test3;
input Acct_ID 1. Month 3. c 5.;
datalines;
1 1 10
1 2 20
1 3 30
1 4 40
2 1 10
2 2 20
2 3 30
3 1 10
3 2 20
4 1 10
;
run;
目标是把超过3个月的ACCT_ID 取最后三个月的平均。存在时间不满三个月的,取最后一个月的数值。
最终答案应该是
Acct_ID     Month        D
1                4              30
2                3              20
3                2              20
4                1              10
data test4;
set test3;
D=c;
by Acct_ID Month;
if Acct_ID = lag2(Acct_ID) then

最佳答案

wang1839 查看完整内容

data test4; set test3; by Acct_ID Month; lag1=lag(c);lag2=lag2(c); if last.Acct_ID then do; if month>=3 then do; d=mean(c,lag1,lag2); end; else d=c; output; end; run;
关键词:lag 平均值 month Lines Input 平均值
沙发
wang1839 在职认证  发表于 2016-6-18 17:13:39 |只看作者 |坛友微信交流群

data test4;
set test3;
by Acct_ID Month;
lag1=lag(c);lag2=lag2(c);
if last.Acct_ID then do;
if month>=3 then do;
d=mean(c,lag1,lag2);
end;
else d=c;
output;
end;
run;

使用道具

藤椅
YTH9149 发表于 2016-6-19 03:36:21 |只看作者 |坛友微信交流群
自己定起来~
我自己写的CODE是这样的。
data test4;
set test3;
RR_0_30=c;
by Acct_ID Month;
if Acct_ID = lag2(Acct_ID) then
        RR_0_30= (LAG2(c)+LAG(c)+c)/3;
IF last.Acct_ID;
drop c;
run;

使用道具

板凳
分析哥 发表于 2016-6-21 01:19:31 |只看作者 |坛友微信交流群
proc sort data=test3;
by acct_id month;
run;
data test3;
set test3;
lag_c=lag(c);
lag2_c=lag2(c);
if lag2_c ^=. then RR_0_30=(c+lag_c+lag2_c);
else RR_0_30=c;
if last.acct_id;
run;

使用道具

报纸
分析哥 发表于 2016-6-21 01:28:00 |只看作者 |坛友微信交流群
分析哥 发表于 2016-6-21 01:19
proc sort data=test3;
by acct_id month;
run;
哦 忘了 set 后面还要加个by

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-27 09:20