SAS中文论坛

标题: [求助]如何挑数据 [打印本页]

作者: shiyiming    时间: 2008-1-7 14:24
标题: [求助]如何挑数据
一个依已有数据集生成新数据集的问题,由于我刚接触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做出来啊?
作者: shiyiming    时间: 2008-1-9 23:30
标题: 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);
作者: shiyiming    时间: 2008-1-11 12:07
标题: Re: [求助]如何挑数据
太谢谢楼上的了,感激不尽




欢迎光临 SAS中文论坛 (https://mysas.net/forum/) Powered by Discuz! X3.2