全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1742 7
2013-11-25
大家好!

我对lag function和retain statement不是很熟悉,尤其是在if then 的情况下。比如下面这个问题,我应该怎么来写代码呢?

我有一些人,我想把这些人编号,从1开始,但如果是重复出现的人名,就不用重复计数。也就是说,我想把下面的数据:

Name
-------
Adam
Bob
Bob
Bob
Charlie
Charlie
Dave
Dave
Dave
Dave
Ethan
....

变成这样的数据:

Name               Number
---------------------------------
Adam                 1
Bob                    2
Bob                    2
Bob                    2
Charlie               3
Charlie                3
Dave                  4
Dave                   4
Dave                  4
Dave                  4
Ethan                 5
....


用lag function + 1 之类的方式应该怎么写呢?请高手指点!(我知道可以有别的方式完成这个)
二维码

扫码加我 拉你入群

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

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

全部回复
2013-11-25 11:26:43
data test;
input name $;
if name ne lag(name) then number+1;
cards;
Adam
Bob
Bob
Bob
Charlie
Charlie
Dave
Dave
Dave
Dave
Ethan
;
二维码

扫码加我 拉你入群

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

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

2013-11-25 13:06:11
wwang111 发表于 2013-11-25 11:26
data test;
input name $;
if name ne lag(name) then number+1;
Thanks so much! So easy!

但你是在 if then 的中间使用了 lag 函数,你不怕出错吗?

另外,number不需要定初始值吗?比如使第一个number = 1?

谢谢你了!
二维码

扫码加我 拉你入群

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

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

2013-11-25 14:00:24
个人感觉,lag函数如果在then之前的话应该是没问题的。
对于number+1,这是一个sum statement,初始值会自动设为0,而且值会retain下来。
二维码

扫码加我 拉你入群

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

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

2013-11-25 15:04:52
Try This:
复制代码
二维码

扫码加我 拉你入群

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

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

2013-11-26 04:48:24
wwang111 发表于 2013-11-25 11:26
data test;
input name $;
if name ne lag(name) then number+1;
in this way the "name" variable must be sorted
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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