如何在SAS PROC SQL中将日期列转换为年月整数格式?
在SAS PROC SQL中生成YYYYMM格式的整数日期列
要将date_sale列(显示格式为MM/DD/YYYY)转换为YYYYMM格式的整数列,分两种场景处理:
场景1:date_sale是SAS日期型变量
SAS日期型变量本质存储的是从1960年1月1日起的天数,只是显示为MM/DD/YYYY格式。直接用YEAR()和MONTH()函数提取年月后计算:
PROC SQL; CREATE TABLE work.sales AS SELECT t1.quantity, t1.value, t1.date_sale, t1.segmento, t1.date_canceling, YEAR(t1.date_sale)*100 + MONTH(t1.date_sale) AS date_i_want FROM wws.table_sale t1; QUIT;
YEAR()提取年份(如2023),MONTH()提取月份(如1),乘100后相加直接得到202301这类整数。
场景2:date_sale是字符型变量
先通过INPUT()函数将字符转成SAS日期值,再按上述逻辑处理:
PROC SQL; CREATE TABLE work.sales AS SELECT t1.quantity, t1.value, t1.date_sale, t1.segmento, t1.date_canceling, YEAR(INPUT(t1.date_sale, MMDDYY10.))*100 + MONTH(INPUT(t1.date_sale, MMDDYY10.)) AS date_i_want FROM wws.table_sale t1; QUIT;
MMDDYY10.是匹配MM/DD/YYYY格式的输入格式,确保字符能正确转成SAS日期值。
通用兼容写法
不管原变量是日期型还是字符型,都可以用格式转换后转整数的方式实现:
PROC SQL; CREATE TABLE work.sales AS SELECT t1.quantity, t1.value, t1.date_sale, t1.segmento, t1.date_canceling, INPUT(PUT(INPUT(t1.date_sale, MMDDYY10.), YYMMN6.), 6.) AS date_i_want FROM wws.table_sale t1; QUIT;
INPUT(t1.date_sale, MMDDYY10.):统一将输入转成SAS日期值(原变量是日期型时此步骤也不会报错)PUT(..., YYMMN6.):将日期值转成YYYYMM格式的6位无分隔符字符INPUT(..., 6.):将字符转成整数类型
内容的提问来源于stack exchange,提问作者Ara_V
相关产品推荐
相关产品推荐

