全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2649 4
2010-11-25
悬赏 5000 个论坛币 已解决
现在已有一个变量date  和两个时间2008-8-15   2008-10-10
现在要生成下面的表格(生成变量n1和n2)

生成规则是:
n1=0 if date是2008-8-15之后的日期中距离2008-8-15最近的日期(这里是2008-08-27),
然后n1向上减去1,向下的话则加1


n2=0 if date是2008-10-10之后的日期中距离2008-10-10最近的日期(这里是2008-10-10),,
然后n2向上减去1,向下的话则加1

daten1n2
2008-6-27-3-6
2008-7-30-2-5
2008-8-5-1-4
2008-8-270-3
2008-9-21-2
2008-9-172-1
2008-10-1030
2009-1-2941
2009-2-2452
2009-3-1363
2009-3-2674
2009-4-285
2009-6-596


求data和sql两种方法实现的程序。

每个程序1000币!(只要算法的思路不同即可视为不同的方法)

好的程序有额外奖励!

最佳答案

pobel 查看完整内容

data have; input date : yymmdd10.; format date yymmdd10.; n1=date-"15Aug2008"d; n2=date-"10Oct2008"d; obs=_n_; cards; 2008-6-27 2008-7-30 2008-8-5 2008-8-27 2008-9-2 2008-9-17 2008-10-10 2009-1-29 2009-2-24 2009-3-13 2009-3-26 2009-4-2 2009-6-5 ; proc sql noprint; select distinct obs into :v1 from have where n1=(select min(n1) from have whe ...
二维码

扫码加我 拉你入群

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

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

全部回复
2010-11-25 11:29:42
data have;
   input date : yymmdd10.;
   format date yymmdd10.;
   n1=date-"15Aug2008"d;
   n2=date-"10Oct2008"d;
   obs=_n_;
   cards;
2008-6-27
2008-7-30
2008-8-5
2008-8-27
2008-9-2
2008-9-17
2008-10-10
2009-1-29
2009-2-24
2009-3-13
2009-3-26
2009-4-2
2009-6-5
;

proc sql noprint;
    select distinct obs into :v1 from have where n1=(select min(n1) from have where n1>=0);
        select distinct obs into :v2 from have where n2=(select min(n2) from have where n2>=0);
quit;

data wanted;
    set have;
        n1=obs-&v1;
        n2=obs-&v2;
        drop obs;
run;
二维码

扫码加我 拉你入群

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

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

2010-11-25 14:03:13
data have;
   input date : yymmdd10.;
   format date yymmdd10.;
   n1=date-"15Aug2008"d;
   n2=date-"10Oct2008"d;
   retain num1 num2;
   num1+(n1<0); lag1=lag(n1);
   num2+(n2<0); lag2=lag(n2);
   if lag1<0 and n1>=0 then  call symputx("num1",num1);
   if lag2<0 and n2>=0 then  call symputx("num2",num2);
   drop num1 num2 lag1 lag2;
   cards;
2008-6-27
2008-7-30
2008-8-5
2008-8-27
2008-9-2
2008-9-17
2008-10-10
2009-1-29
2009-2-24
2009-3-13
2009-3-26
2009-4-2
2009-6-5
;

data wanted;
   set have;
  n1=_n_-&num1-1;
  n2=_n_-&num2-1;
run;
二维码

扫码加我 拉你入群

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

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

2010-11-26 02:55:10
3# pobel

复制代码

我的宗旨是在别人的启发下,自己再想一想,是在提高自己。当然哈哈,赏金嘛,其次其次。
二维码

扫码加我 拉你入群

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

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

2010-11-26 13:04:39
jingju11 发表于 2010-11-26 02:55
3# pobel
复制代码
我--
SOPOR:水就水吧。没有水货,哪有真金?
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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