如何在SAS现有表中新增日期列并基于现有日期回溯6个月
问题原因&解决方法
你的代码存在多处SAS语法错误,才会导致NewDate列无值,修正后代码如下:
DATA temp; SET Have; /* 引入现有数据集Have */ /* 赋值用=而非冒号,INTNX第四个参数's'代表对齐原日期的日,避免月末偏移 */ NewDate = INTNX('Month', Date, -6, 's'); /* 如需NewDate显示为可读日期格式,可加上下面的格式声明 */ FORMAT NewDate yymmdd10.; RUN;
具体错误说明:
- 赋值操作符使用错误:SAS中给变量赋值用
=,你代码里的冒号:是非法赋值语法,无法生成正确的字段值 - SET语句后注释格式错误:SAS不支持
--格式的注释,合法注释写法为/* 注释内容 */或者* 注释内容;,错误的注释会干扰代码正常解析 - 可选优化:给
INTNX函数加上第四个对齐参数,避免计算月末日期时出现偏移,比如原日期是6月30日,不加参数的话回溯6个月可能返回1月31日而非1月30日
额外注意:
如果原数据集Have里的Date字段是字符类型而非SAS日期类型,需要先转成日期格式再计算:
DATA temp; SET Have; date_num = INPUT(Date, yymmdd10.); /* 这里的yymmdd10.要和你实际的字符日期格式匹配 */ NewDate = INTNX('Month', date_num, -6, 's'); FORMAT NewDate yymmdd10.; RUN;
内容的提问来源于stack exchange,提问作者Gola1
相关产品推荐
相关产品推荐

