SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 518|回复: 8
打印 上一主题 下一主题

请牛人指点指点

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2011-5-15 09:14:11 | 只看该作者

请牛人指点指点

[size=150:358nlcas]问题: 根据T1和T2得出T3的结果
说明:
1、T1中的1或者2不只3个有可能是40个1、38个2;
2、当T1值相等时,T2的值也会相等;
3、T1是按升充排列;
4、T3是的意思是当B在T2出现时他是对应T1出现的顺序,就像第一次的三个B1就是B刚出现时对应T1
在线求教,谢谢![/size:358nlcas]
T1        T2        T3
1        A       
1        A       
1        A       
2        B        B1
2        B        B1
2        B        B1
3        B        B2
3        B        B2
3        B        B2
4        B        B3
4        B        B3
4        B        B3
5        A       
5        A       
5        A       
6        A       
6        A       
6        A       
7        B        B1
7        B        B1
7        B        B1
8        B        B2
8        B        B2
8        B        B2
9        B        B3
9        B        B3
9        B        B3
10        A       
10        A       
10        A
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2011-5-15 10:05:52 | 只看该作者

Re: 请牛人指点指点

那T3的逻辑是什么呢?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2011-5-15 10:34:53 | 只看该作者

Re: 请牛人指点指点

刚把T3的意思写了一下,麻烦阅览一下,看我有没有说明白
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2011-5-16 03:47:41 | 只看该作者

Re: 请牛人指点指点

data b;
input T1 T2 $;
cards;
1        A
1        A
1        A
2        B
2        B
2        B
3        B
3        B
3        B
4        B
4        B
4        B
5        A
5        A
5        A
6        A
6        A
6        A
7        B
7        B
7        B
8        B
8        B
8        B
9        B
9        B
9        B
10        A
10        A
10        A
;
run;
proc sql;
create table c as select * from b where (T2='B');
quit;
data d(drop=first i);
set c;
retain T3;
if first then do;
i=1;
T3='B'||put(i,1.);
end;
if T1^=lag(T1) and (T1-lag(T1)=1) then do;
i+1;T3='B'||put(i,1.); end;
if         T1^=lag(T1) and (T1-lag(T1)^=1)        then do;
i=1;T3='B'||put(i,1.);end;
run;
proc sort data=b;
by T1;
run;
proc sort data=d;
by T1;
run;
data final;
merge b d;
by T1;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2011-5-16 09:26:20 | 只看该作者

Re: 请牛人指点指点

膜拜牛人,真是太强大了!
能不能指点一下,retain的具体意思,到处查询也查不到
还有 我测试了一下好像把这个删除掉不影响结果,是不是有什么地方我忽略了,请问下面这句程式能删除吗?
if first then do;
i=1;
T3='B'||put(i,1.);
end;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2011-5-16 16:04:47 | 只看该作者

Re: 请牛人指点指点

retain字面意思就是保留的意思,就是这个变量的值如果你不修改他,他就不变的意思。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2011-5-25 20:15:23 | 只看该作者

Re: 请牛人指点指点

就是楼上说的意思,用retain是因为同一个T3可能会重复出现,所有语句都可以在sas帮助栏里面找到的
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2011-5-26 00:06:53 | 只看该作者

Re: 请牛人指点指点

[quote="526772552":2y35pedr]膜拜牛人,真是太强大了!
能不能指点一下,retain的具体意思,到处查询也查不到
...[/quote:2y35pedr]

一般遇到的问题 help文档是最好的介绍,要使用好帮助文档 <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
9#
 楼主| 发表于 2011-5-26 09:18:07 | 只看该作者

Re: 请牛人指点指点

data step may be the first choice to attack this kind of question. Jingju

[code:3vredb8b]data bb; drop n;
        set b; by t1 t2 notsorted;  length t3 $5;
        if t2 ^='B' then n =0;
                else if first&#46; t2 then n ++1;
        if n =0 then call missing(t3);
                else t3 =cats(t2, n);
run;[/code:3vredb8b]
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-6-10 12:52 , Processed in 0.072335 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表