全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3854 21
2012-07-10
有一个程序问题想请教大家,以下是原始数据:

    number                date
    600203                2012-01-01
    600203                2012-01-15
    600204                2012-01-14
    600205                2012-01-04
    600205                2012-01-19
    600206                2012-01-03
    600206                2012-01-28
    600207                2012-01-05
    600208                2012-01-09


要求结果如下:

   number                date1                date2         cishu
    600203                2012-01-01   2012-01-15    2
    600204                2012-01-14                         1
    600205                2012-01-04   2012-01-19    2
    600206                2012-01-03   2012-01-28    2
    600207                2012-01-05                         1
    600208                2012-01-09                         1

次数的计算已经解决了,用if first 和 if last,

想知道时间怎么计算。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2012-7-10 20:42:19
data a;
length number $6;
informat date yymmdd10.;
input number
      date;
format date yymmdd10.;
cards;
600203                2012-01-01
600203                2012-01-15
600204                2012-01-14
600205                2012-01-04
600205                2012-01-19
600206                2012-01-03
600206                2012-01-28
600207                2012-01-05
600208                2012-01-09
;
proc sort data=a;
by number date;
run;

data result;
retain number;
format date1
       date2 yymmdd10.;
do _n_=1 by 1 until(last.number);
  set a;
  by number;
  if _n_=1 then do;date1=date;date2=. ;end;
end;
if _n_ ge 2 then date2=date ;
cishu=_n_;
drop date;
run;

/*sql*/
proc sql noprint;
create table result2 as
select number,min(date) as date1 format=yymmdd10.,
(case when(count(*) ge 2) then max(date) else . end )as date2 format=yymmdd10.,count(*) as cishu
from a
group by 1;
quit;

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-7-10 20:45:47
data ex;
input num date:$10.;
cards;
    600203                2012-01-01
    600203                2012-01-15
    600204                2012-01-14
    600205                2012-01-04
    600205                2012-01-19
    600206                2012-01-03
    600206                2012-01-28
    600207                2012-01-05
    600208                2012-01-09
        ;
        run;
data _null_;
length date1 $10 date2 $10;
if _n_=1 then do;
declare hash h();
h.definekey('num');
h.definedata('num','date1','date2','cishu');
h.definedone();
end;
set ex;
if h.find() ne 0 then do;
date1=date;
cishu=1;
h.add();
end;
else do;
date2=date;
cishu=cishu+1;
h.replace();
end;
h.output(dataset:'ex1');
run;

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-7-11 00:36:10
只会有date1 和date2 ?
还是出现一次就算一次,会有date3  date4  date5...?
如果是前者的话,很简单...如果是后者,就稍复杂点.
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-7-11 08:53:13
proc transpose
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-7-11 09:00:28
非常感谢兄弟的解答,不过是后者~~~
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群