楼主: tangzimo
1810 7

如何写 lag function + 1 之类的代码 [推广有奖]

  • 0关注
  • 0粉丝

高中生

42%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
362 点
帖子
36
精华
0
在线时间
20 小时
注册时间
2006-9-11
最后登录
2015-9-20

楼主
tangzimo 发表于 2013-11-25 11:19:49 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
大家好!

我对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 之类的方式应该怎么写呢?请高手指点!(我知道可以有别的方式完成这个)
二维码

扫码加我 拉你入群

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

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

关键词:function Fun CTI lag 如何写 function 如何

回帖推荐

wwang111 发表于2楼  查看完整内容

data test; input name $; if name ne lag(name) then number+1; cards; Adam Bob Bob Bob Charlie Charlie Dave Dave Dave Dave Ethan ;

沙发
wwang111 发表于 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
;
已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
Imasasor + 60 + 60 + 3 + 4 + 3 分析的有道理

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

只有一个罗纳尔多

藤椅
tangzimo 发表于 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?

谢谢你了!

板凳
wwang111 发表于 2013-11-25 14:00:24
个人感觉,lag函数如果在then之前的话应该是没问题的。
对于number+1,这是一个sum statement,初始值会自动设为0,而且值会retain下来。
只有一个罗纳尔多

报纸
Tigflanker 发表于 2013-11-25 15:04:52
Try This:
  1. data test1;
  2.   retain id 0;
  3.   set test;
  4.   by name;

  5.   if first.name then id+1;
  6. run;
复制代码
Bye SAS.
若有缘,能重聚。

地板
tangliang0905 发表于 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

7
linusx 发表于 2013-11-26 05:15:39
如果用lag,一定都要先sort

8
tangzimo 发表于 2013-11-30 10:55:08
Thanks all!!!

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-16 05:29