楼主: ertyuj
1591 4

[问答] 悬赏求助:怎么用SAS来计算一列数(和前一行以及自身相关) [推广有奖]

  • 0关注
  • 1粉丝

硕士生

40%

还不是VIP/贵宾

-

威望
0
论坛币
254 个
通用积分
0.7615
学术水平
0 点
热心指数
1 点
信用等级
0 点
经验
-351 点
帖子
136
精华
0
在线时间
164 小时
注册时间
2007-2-7
最后登录
2022-3-17

50论坛币
我有如下表格,按照顾客号码cust_id 和日期period排过序了。原始表格不包括y,怎么用sas编程来计算y?最后y的数值应当像我下面表格列出的一样。

y的要求如下:对于一个cust_id的第一个period,y=x1(表格中y的第一个数1000是这么来的);对于这个cust_id的其他period,y=前期的y + 前期的x2 + 当期的x3(表格中y的第二个数是1005,因为前期的y=1000,前期的x2=3,当期x3=2)。估计需要使用retain或者lag,我不清楚。


cust_idperiodx1x2x3 y

1

1

1000

3

3

1000

1

2

1000

5

2

1005

1

3

1000

6

4

1014

1

4

1000

7

6

1026

1

5

1000

3

2

1035

2

1

2000

6

5

2000

2

2

2000

4

6

2012

2

3

2000

3

1

2017


最佳答案

小熊包 查看完整内容

data a; input cust_id period x1 x2 x3; cards; 1 1 1000 3 3 1 2 1000 5 2 1 3 1000 6 4 1 4 1000 7 6 1 5 1000 3 2 2 1 2000 6 5 2 2 2000 4 6 2 3 2000 3 1 ; run; proc sort data=a; by cust_id period; run; data b; set a; by cust_id period; z=lag(x2)+x3; retain y; if first.cust_id then do; y=x1; z=.; end; else y=y+z; run;
数据科学和机器学习博客:https://shorturl.at/jtHTW
沙发
小熊包 发表于 2018-11-12 14:11:31 |只看作者 |坛友微信交流群
data a;
input cust_id period x1 x2 x3;
cards;
1 1 1000 3 3
1 2 1000 5 2
1 3 1000 6 4
1 4 1000 7 6
1 5 1000 3 2
2 1 2000 6 5
2 2 2000 4 6
2 3 2000 3 1
;
run;

proc sort data=a;
by cust_id period;
run;

data b;
set a;
by cust_id period;
z=lag(x2)+x3;
retain y;
if first.cust_id then do; y=x1; z=.; end;
else y=y+z;
run;
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
admin_kefu + 30 + 3 + 3 + 3 热心帮助其他会员

总评分: 论坛币 + 30  学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

使用道具

藤椅
ertyuj 发表于 2018-11-12 23:51:48 |只看作者 |坛友微信交流群
小熊包 发表于 2018-11-12 14:11
data a;
input cust_id period x1 x2 x3;
cards;
你真厉害!我再问下,retain y 这行code放在data step中的任何位置都可以吗,还是会有区别?能展开讲讲retain到底是干啥的,怎么用吗?要有简单清楚的例子讲解,还请提供一个链接。谢谢!

使用道具

板凳
ertyuj 发表于 2018-11-12 23:52:11 |只看作者 |坛友微信交流群
小熊包 发表于 2018-11-12 14:11
data a;
input cust_id period x1 x2 x3;
cards;
你真厉害!我再问下,retain y 这行code放在data step中的任何位置都可以吗,还是会有区别?能展开讲讲retain到底是干啥的,怎么用吗?要是有简单清楚的例子讲解的话,还请提供一个链接。谢谢!

使用道具

报纸
小熊包 发表于 2018-11-14 10:39:57 |只看作者 |坛友微信交流群
ertyuj 发表于 2018-11-12 23:52
你真厉害!我再问下,retain y 这行code放在data step中的任何位置都可以吗,还是会有区别?能展开讲讲re ...
抱歉回复晚了。我还是个sas小白,也不是太明白retain的原理,都是边看结果边调试code。对于这个例子,我试着改变了retain y的位置,结果不会变,只是y变量在数据集中的顺序会有不同。

使用道具

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

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

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

GMT+8, 2024-4-25 19:53