SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 950|回复: 4
打印 上一主题 下一主题

帮我看看这道题

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2007-9-9 21:51:52 | 只看该作者

帮我看看这道题

name birthday gender which race time
Smith, James 03-09-91 M 1 00:39:42
Smith, James 03-09-91 M 2 00:38:25
Anderson, Jim 05-27-79 M 1 00:36:10
Anderson, Jim 05-27-79 M 2 00:36:52
Milton, Karen 10-23-71 F 1 00:42:36
Milton, Karen 10-23-71 F 2 00:44:01
Cooper, Frances 02-13-82 F 1 00:46:47
(这个数据只是一部分)
就是说有两个比赛,有的人参加一次,也参加了另一次,还给出了每次所用的时间。
现在要求:
restructure the data set so there is only observation per runner with the
observation giving the name of the runner ,their sex ,age ,age group (Youth,
adult ,or Senior),the times for the two races and the best time.Print(
display)this new data set.
Female Youth(16 and under) Female Adult(17-49) Female Senior (50 and over) -
----

都快崩溃了,周围没有人够请教的的,只能上来问了。
1.知道了生日怎末求年龄呢?是不是只有知道了年龄才能用它给出的条件来分组呢?
2.还有就是一个名字出现两次怎样变成他只出现一次呢?
还不知道学的啥呢,就要考试了,谢谢大家指点.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2007-9-10 21:43:09 | 只看该作者

Re: 帮我看看这道题

search 一下or论坛的帖子,我曾经遇到过类似问题,用array来做.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2007-9-13 15:28:48 | 只看该作者

Re: 帮我看看这道题

根据你的要求编了一个程序,但感觉 繁杂
不简洁 我是新手
如果搂主实在没解决 可以试一下 <!-- s:lol: --><img src="{SMILIES_PATH}/icon_lol.gif" alt=":lol:" title="Laughing" /><!-- s:lol: -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2007-9-14 12:54:10 | 只看该作者

Re: 帮我看看这道题

可以这样:



data race;
input name: $15. birthday: mmddyy8. gender $ whichrace time: time8.;
format birthday mmddyy8. time time8.;
age=intck('year',birthday,today());
if (.&lt;age&lt;=16) then agegroup='Youth';
else if (17&lt;=age&lt;=49) then agegroup='Adult';
else if (50&lt;=age)  then agegroup='Senior';
datalines;
Smith,James 03-09-91 M 1 00:39:42
Smith,James 03-09-91 M 2 00:38:25
Anderson,Jim 05-27-79 M 1 00:36:10
Anderson,Jim 05-27-79 M 2 00:36:52
Milton,Karen 10-23-71 F 1 00:42:36
Milton,Karen 10-23-71 F 2 00:44:01
Cooper,Frances 02-13-82 F 1 00:46:47
;
run;

proc sql;
create table onlyrace as
select name, birthday, gender, whichrace,max(whichrace) as racetimes, time, age, agegroup from race
group by name
order by name, time;
quit;

data onlyrace;
set onlyrace;
retain besttime;
by name time;
if first.name then besttime=time;
format besttime time8.;
run;

data onlyrace;
   set onlyrace;
      by name;

      retain time1-time2;
         
      array ttime{2} time1-time2;

      if first.name then
         do i = 1 to 2;
            ttime{i} = .;
         end;

      ttime{whichrace} = time;

      if last.name;
          format time1-time2 time8.;
          drop i time;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2008-1-5 19:32:37 | 只看该作者

Re: 帮我看看这道题

data a;
input name: $15. birthday:mmddyy8. gender $ which race_time time8.;
cards;
Smith,James 03-09-91 M 1 00:39:42
Smith,James 03-09-91 M 2 00:38:25
Anderson,Jim 05-27-79 M 1 00:36:10
Anderson,Jim 05-27-79 M 2 00:36:52
Milton,Karen 10-23-71 F 1 00:42:36
Milton,Karen 10-23-71 F 2 00:44:01
Cooper,Frances 02-13-82 F 1 00:46:47
;
proc sort data=a;
        by name birthday;
run;
data b(drop=birthday race_time rename=(gender=sex));
        length age_group $ 6;
        set a(drop=which);
        by name birthday;
        retain best_time;
        if first.birthday then best_time=race_time;
        if race_time&lt;best_time then best_time=race_time;
        if last.birthday then do;
                age=intck('year',birthday,today());
                if age&lt;16 then age_group='Youth';
                else if age&lt;=50 then age_group='Adult';
                else age_group='Senior';
                output;
        end;
        format best_time time8.;
run;
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-4 12:08 , Processed in 0.072877 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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