全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
8975 3
2010-10-12
data _null_;
mob=intck('day365','18dec2009'd,'10oct2010'd);
mob1=intck('day365','19dec2009'd,'10oct2010'd);
mob2=put(intnx('day','10oct2010'd,-365),date9.);
put mob mob1 mob2;
run;


百思不得其解,本来我是想用算类似于注册时长这类的数据,intck(‘year’)算出来,只是将年份与年份相减,不准确,所以用day来算,但是结果是这样
1 0 10OCT2009
不理解啊?明明是365天,它怎么只算了305天呢?求解,谢谢
二维码

扫码加我 拉你入群

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

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

全部回复
2010-10-12 12:48:35
SAS Help:
For all multiunit intervals except multiweek intervals, the SAS System creates an interval beginning on January 1, 1960, and counts forward from that date to determine where individual intervals begin on the calendar. As a practical matter, when a year can be divided evenly by an interval, think of the intervals as beginning with the current year.

下面的代码可以输出每个 'day365' 区间的第一天。

data test;
     from='01jan1960'd;
     format beginner yymmdd10. ;
     do i=0 to 51;
         beginner=intnx('day365',from,i);
         put beginner= ;
        output;
     end;
run;


part of log:
beginner=2007-12-20
beginner=2008-12-19
beginner=2009-12-19
beginner=2010-12-19


mob=intck('day365','18dec2009'd,'10oct2010'd);
mob1=intck('day365','19dec2009'd,'10oct2010'd);

'18dec2009'd 和 '10oct2010'd 之间包含了一个beginner "2009-12-19",所以mob值是1,
'19dec2009'd 和 '10oct2010'd 之间不包含beginner,所以mob1的值是0。

希望对你有点帮助。
二维码

扫码加我 拉你入群

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

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

2010-10-12 12:58:46
明白了,谢谢啊,好厉害
最后我这样解决写了
mob=round(('10oct2010'd-datepart(starts))/365);
还有什么其他方法么?或者函数来解决的?
二维码

扫码加我 拉你入群

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

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

2010-10-12 13:02:26
yrdif
详见帮助,可能会好一点
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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