SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 707|回复: 2
打印 上一主题 下一主题

[求助]如何挑数据

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2008-1-7 14:24:28 | 只看该作者

[求助]如何挑数据

一个依已有数据集生成新数据集的问题,由于我刚接触SAS不久,水平实在是低,烦请高手们帮助我一下,不胜感激!
已有数据集为三列,如下:
  data           time         number
20050905     070000          15
20050905     070120          13
20050905     070125          18
20050905     070156          13
20050905     070208          9
20050905     070601          17
20050905     070711          10
20050905     070923          21
20050905     071216          15
20050905     080519          12
....................................
20050905     170955          11
20050905     172209          15
20050905     173000          8
20050906     070000          13
...................................
20050930     173000          15
这数据中是9月份每天不同时间统计出来的数据,现在要挑的数据是大体每隔15分钟拿出一个,比如第一个数据选20050905     070000的话,那接着那个数据应该是第一个大于20050905     071500的那个数据,接着挑出来就是第一个大于20050905     073000的那个数据
请问,这怎么用SAS做出来啊?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2008-1-9 23:30:01 | 只看该作者

Re: [求助]如何挑数据

data a;
input date time $6. number;
cards;
20050905 070000 15
20050905 070120 13
20050905 070125 18
20050905 070156 13
20050905 070208 9
20050905 070601 17
20050905 070711 10
20050905 070923 21
20050905 071216 15
20050905 080519 12
20050905 170955 11
20050905 172209 15
20050905 173000 8
20050906 070000 13
20050930 173000 15
;
run;
%macro a(date,starttime,interval);
%let date=%sysfunc(compress(&date,%str(%-)));
%let starttime=%str(%')&starttime%str(%'t);

data _null_;
        a=%unquote(&starttime);
        call symput('starttime',trim(left(a)));
run;

%let interval=%sysevalf(&interval*60);
%let m=%eval(&interval+1);

data temp;
set a ;
xx=hms(substr(time,1,2),substr(time,3,2),substr(time,5,2));
if date=&date and xx>=&starttime;
;

proc sql noprint;
        select max(xx) into:max from temp;
quit;


%let n=%sysfunc(ceil(%sysevalf((&max-&starttime)/&interval)));



data temp1;
length type 8;
set  temp;
do i=1 to &n;
if &starttime+(i-1)*&m<=xx<=&starttime-1+i*&m then type=i;
end;
drop i;

proc sort data=temp1 out=temp2;
by type;
run;

data result;
set temp2;
by type;
if first.type then output;
drop type xx;
run;
%mend;
%a(20050905,07:00:00,15);
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2008-1-11 12:07:33 | 只看该作者

Re: [求助]如何挑数据

太谢谢楼上的了,感激不尽
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-4 10:38 , Processed in 0.130070 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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