作者bugle (低点)
站内Statistics
标题Re: [程式] sas时间格式处理问题
时间Sun Jun 6 03:23:28 2010
※ 引述《rover99 (另一扇门)》之铭言:
: 就我的认知
: 读进资料格式要用informat
: 将电脑资料显示我们要的格式要用format
: data aa;
: informat date yymmdd10.;
正确来说,这里下 informat date yymmdd8.;
: format date yymmdd10.;
: input date;
: cards;
: 19970422
: 20020808
: 19961025
: ;
: run;
: 藉由这篇文章
: 想衍生一下我遇到的问题
: 我有两个变数 start_date, end_month
: start_date 已读入sas,设成日期格式,格式设成 yymmdd10. (ex:20090101)
: end_month 已读入sas,设成「数字」格式 (ex:200905)
: 现在我想要计算start_date和end_month之间差了几个月
: 理想状况可以用 intck('month', start_date, end_month)
: 所以想将end_month由「数字」格式转成「日期格式」
: 试了几种方法都失败
: 想请问大家,我失败的地方在哪边?
: 想法一:
: end_date=compress(end_month||10); /*想将200905变成20090510*/
: informat end_date yymmdd10.; /*并且将20090510让sas读成日期格式*/
: 再用 intck('month', start_date, end_date) 来计算两个日期格式的差异月数
: 不过...失败
你还不懂"日期"跟"数字"的差异
并不是 数字的20090510 就可以说它是日期
前面有人说过了,SAS内日期是设定1960/1/1为1,余类推
: 想法二:
: end_date = end_month*100+10;
: /*用compress函数行不通,我直接计算出20090510这个数字 XD*/
: informat end_date yymmdd10.;
: 再用 intck('month', start_date, end_date)
: 还是失败
同上
: 看了上一篇i版友的回答
: 我试着用 MDY 这个函数产生 end_date ,结果是可行的
: 不过还是想讨论看看,上述我两种想法哪边有问题
: 谢谢
试试这个吧:
a = intck('month', start_date, input(put(end_date,z6.),yymmn6.));
或
a = intck('month', start_date, mdy(mod(end_date,100),1,int(end_date/100)));
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 125.227.141.91
※ 编辑: bugle 来自: 125.227.141.91 (06/06 03:36)
1F:推 rover99:感谢,转换格式的细节真的要蛮小心的 06/07 02:21