标题: 请牛人指点指点 [打印本页] 作者: 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. t2 then n ++1;
if n =0 then call missing(t3);
else t3 =cats(t2, n);
run;[/code:3vredb8b]