楼主: gundamlf
4199 20

[原创博文] 在這情況,請教如何用解決呢?(急需coding!) [推广有奖]

11
gundamlf 发表于 2009-11-14 13:11:38
jingju11 发表于 2009-11-14 13:04
9# gundamlf


以上是我的SAS运行出的结果。也可能我们根本没有明白你的意思。比如说最后一条记录是horse 3 的第一场,为何不为零?
                       Obs       race         code       dist_ran   new_dist
                            1       1        724        1200          0
                            2       1        531        1200          0
                            3       1         62        1200          0
                            4       1        606        1200          0
                            5       1        369        1200          0
                            6       1        548        1200          0
                            7       1        335        1200          0
                            8       1        482        1200          0
                            9       1        393        1200          0
                           10       1        373        1200          0
                           11       1         58        1200          0
                           12       1        594        1200          0
                           13       1         65        1200          0
                           14       2        754        1400          0
                           15       2         69        1400          0
                           16       2        158        1400          0
                           17       2        639        1400          0
                           18       2        649        1400          0
                           19       2        287        1400          0
                           20       2        172        1400          0
                           21       2        216        1400          0
                           22       2         80        1400          0
                           23       2        496        1400          0
                           24       2        132        1400          0
                           25       2        191        1400          1
以obs25為例,horse code191這隻馬是第一次跑1400m這distance的,所以new_distance應要=0

12
xiaosanmao 发表于 2009-11-14 13:14:47
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

13
jingju11 发表于 2009-11-14 13:22:17
11# gundamlf

我理解错你的horse_code 和race_number了
你只要把我的input 语句里这两个变量位置调换一下即可。

14
gundamlf 发表于 2009-11-14 13:27:04
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
可否令output跟會原先的次序呢?
因這組code出現的output是跟着horse code順序,但我原有的dataset是有其他variabes,現在不能merge了.
謝謝你

15
gundamlf 发表于 2009-11-14 13:28:52
jingju11 发表于 2009-11-14 13:22
11# gundamlf

我理解错你的horse_code 和race_number了
你只要把我的input 语句里这两个变量位置调换一下即可。
先謝謝大大
你沒有理解错呢
只是因為每一隻horsecode,第一次出現,new_dist必然是0的

16
xiaosanmao 发表于 2009-11-14 13:39:10
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;

17
gundamlf 发表于 2009-11-14 14:16:45
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;
萬分感謝大大的幫助!!!

18
lcwiss 发表于 2009-11-14 15:30:23
我是新手,这里用了一个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;
如有错误,望各位高手指正

19
xiaosanmao 发表于 2009-11-14 15:51:29
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;
如有错误,望各位高手指正
问题大了,你测试下面的数据会错一堆哦
1   1   1
5   1   1
14   1  1
250 24 1
260 25 1
310 26 1

20
lcwiss 发表于 2009-11-14 17:16:25
楼上说的是啊,我忘了加一个条件,现在改了一下,而且用你的数据试了一下,好像没问题了啊,你再看看,呵呵,毕竟是新手啊
data x;
input Race_number     Horse_code       Distance_ran ;
cards;
1   1   1
5   1   1
14   1  1
250 24 1
260 25 1
310 26 1
;
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) and Horse_code=lag(Horse_code))
then New_distance=1;
else New_distance=0;
proc print data=end;
run;

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-26 23:10