SAS中文论坛

标题: 请牛人指点指点 [打印本页]

作者: shiyiming    时间: 2011-5-15 09:14
标题: 请牛人指点指点
[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
作者: shiyiming    时间: 2011-5-15 10:05
标题: Re: 请牛人指点指点
那T3的逻辑是什么呢?
作者: shiyiming    时间: 2011-5-15 10:34
标题: Re: 请牛人指点指点
刚把T3的意思写了一下,麻烦阅览一下,看我有没有说明白
作者: shiyiming    时间: 2011-5-16 03:47
标题: 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;
作者: shiyiming    时间: 2011-5-16 09:26
标题: Re: 请牛人指点指点
膜拜牛人,真是太强大了!
能不能指点一下,retain的具体意思,到处查询也查不到
还有 我测试了一下好像把这个删除掉不影响结果,是不是有什么地方我忽略了,请问下面这句程式能删除吗?
if first then do;
i=1;
T3='B'||put(i,1.);
end;
作者: shiyiming    时间: 2011-5-16 16:04
标题: Re: 请牛人指点指点
retain字面意思就是保留的意思,就是这个变量的值如果你不修改他,他就不变的意思。
作者: shiyiming    时间: 2011-5-25 20:15
标题: Re: 请牛人指点指点
就是楼上说的意思,用retain是因为同一个T3可能会重复出现,所有语句都可以在sas帮助栏里面找到的
作者: shiyiming    时间: 2011-5-26 00:06
标题: Re: 请牛人指点指点
[quote="526772552":2y35pedr]膜拜牛人,真是太强大了!
能不能指点一下,retain的具体意思,到处查询也查不到
...[/quote:2y35pedr]

一般遇到的问题 help文档是最好的介绍,要使用好帮助文档 <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
作者: shiyiming    时间: 2011-5-26 09:18
标题: 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]




欢迎光临 SAS中文论坛 (http://mysas.net/forum/) Powered by Discuz! X3.2