我正在从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。
您对如何编码有什么想法吗?
非常感谢你。
答案 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.)