oracle sql代码到sas proc sql - 添加月份

时间:2017-05-29 10:00:01

标签: sql sql-server oracle sas

我正在从oracle sql重写代码到sas proc sql,我对此有疑问:

where demandes_fin.per_idt = to_char(add_months(to_date(fin.per_idt,'yyyymm'),1),'yyyymm'))

demandes_fin.per_idt和fin.per_idt是INT变量 - 例如201612。

函数to_char,add_months,to_date在SAS proc sql中不起作用。我试图使用put,input,intnx,format替换它们,但它没有像我预期的那样工作。

我试图将此代码放在select语句中以查看生成的值:

   intnx('month', input(put(fin.per_idt,6.),yymmn6.), 1) as dt1

fin.per_idt是201701,生成的值是20851。

您对如何编码有什么想法吗?

非常感谢你。

1 个答案:

答案 0 :(得分:0)

看起来你已经解决了问题。 SAS将日期存储为自01JAN1960以来的天数。数字20,851代表01FEB2017,即2017年1月之后的一个月。

如果您想将结果保留为SAS日期值,只需将FORMAT关键字添加到您的定义中,以便日期以人类可以理解的格式显示。

intnx('month', input(put(fin.per_idt,6.),yymmn6.), 1) as dt1 format date9.

如果你想将它转换回你开始的奇怪整数值,那么只需添加一些PUT()和INPUT()函数调用。

input(put(intnx('month', input(put(fin.per_idt,6.),yymmn6.), 1),yymmn6.),6.)