
jingju11 发表于 2009-11-12 00:43
6# gundamlf [code]data x;
input Race_number Horse_code Distance_ran ;
n+1; *remember the original order;
cards;
1 1 1
5 1 1
14 1 2
312 25 4
250 25 1
260 1 2
310 25 4
;
run;
proc sort; by Horse_code Race_number Distance_ran; run;
data final;
set x;
lagHorse_code =lag(horse_code); lagDistance_ran =lag(Distance_ran);
new_distance =0;
.....code]
Horse_ Race_ Distance_ new_
Obs Obs code number ran new_dist distance
1 1 1 724 1200 0 1
2 2 1 531 1200 0 1
3 3 1 62 1200 0 1
4 4 1 606 1200 0 1
5 5 1 369 1200 0 1
6 6 1 548 1200 0 1
7 7 1 335 1200 0 1
8 8 1 482 1200 0 1
9 9 1 393 1200 0 1
10 10 1 373 1200 0 1
11 11 1 58 1200 0 0
12 12 1 594 1200 0 1
13 13 1 65 1200 0 1
14 14 2 754 1400 0 1
15 15 2 69 1400 0 0
16 16 2 158 1400 0 1
17 17 2 639 1400 0 1
18 18 2 649 1400 0 1
19 19 2 287 1400 0 1
20 20 2 172 1400 0 1
21 21 2 216 1400 0 1
22 22 2 80 1400 0 1
23 23 2 496 1400 0 1
24 24 2 132 1400 0 1
25 25 2 191 1400 1 1
26 26 3 152 1200 0 1
27 27 3 399 1200 0 1
28 28 3 480 1200 0 1
29 29 3 709 1200 0 1
30 30 3 328 1200 0 1
31 31 3 765 1200 0 1
32 32 3 838 1200 0 1
33 33 3 632 1200 0 1
34 34 3 36 1200 1 0
jingju11 发表于 2009-11-14 13:04
9# gundamlf
以上是我的SAS运行出的结果。也可能我们根本没有明白你的意思。比如说最后一条记录是horse 3 的第一场,为何不为零?
xiaosanmao 发表于 2009-11-14 13:14
proc sort;by Horse_code Distance_ran;run;
data final;set x;
by Horse_code Distance_ran;
if first.Horse_code then New_distance=-1;
if first.Distance_ran then New_distance=-1;
New_distance+1;
if New_distance>1 then New_distance=1;
run;
本文来自: 人大经济论坛 详细出处参考:http://www.pinggu.org/bbs/viewthread.php?tid=612359&page=1
jingju11 发表于 2009-11-14 13:22
11# gundamlf
我理解错你的horse_code 和race_number了
你只要把我的input 语句里这两个变量位置调换一下即可。
xiaosanmao 发表于 2009-11-14 13:39
data x;
input Race_number Horse_code Distance_ran ;
n+1;
cards;
1 1 1
5 1 1
14 1 2
312 25 4
250 25 1
260 25 4
310 25 4
;run;
proc sort;by Horse_code Distance_ran;run;
data final;set x;
by Horse_code Distance_ran;
if first.Horse_code then New_distance=-1;
if first.Distance_ran then New_distance=-1;
New_distance+1;
if New_distance>1 then New_distance=1;
run;
proc sort data=final;by n;run;
lcwiss 发表于 2009-11-14 15:30
我是新手,这里用了一个lag函数,貌似能得出结果啊,楼主不妨一试:
data x;
input Race_number Horse_code Distance_ran ;
cards;
1 1 1
5 1 1
14 1 2
250 25 1
260 25 4
310 25 4
;
proc sort data=x out=final;
by Horse_code Race_number Distance_ran;
run;
data end;
set work.final;
if Distance_ran=lag(Distance_ran)
then New_distance=1;
else New_distance=0;
proc print data=end;
run;
如有错误,望各位高手指正
扫码加好友,拉您进群



收藏
