Sas 字符到日期的转换

Sas 字符到日期的转换,sas,Sas,我有一个日期“20161”(即“jan2016”)作为字符,现在我想将其显示为“jan2016”,我如何才能做到这一点?很清楚,您从一个字符串变量开始,希望结果是一个字符串变量?这似乎有潜在的局限性,因为日期更容易被当作数字来处理 从字面上理解您的请求,我将解析所提供字符串的前4个字符,并将它们设置为年份。然后我会像对待这个月一样对待所有其他角色。我们将使用MDY()函数创建一个真正的日期(数值变量),假设该日期为1 这给了我们一个中间数值变量,我们将把它传递给PUT()函数,这样我们就可以将数

我有一个日期“20161”(即“jan2016”)作为字符,现在我想将其显示为“jan2016”,我如何才能做到这一点?

很清楚,您从一个字符串变量开始,希望结果是一个字符串变量?这似乎有潜在的局限性,因为日期更容易被当作数字来处理

从字面上理解您的请求,我将解析所提供字符串的前4个字符,并将它们设置为年份。然后我会像对待这个月一样对待所有其他角色。我们将使用MDY()函数创建一个真正的日期(数值变量),假设该日期为1

这给了我们一个中间数值变量,我们将把它传递给PUT()函数,这样我们就可以将数字转换成所需MONYY7中的字符串。格式。最后一点是,您希望输出字符串小写,因此我们将最终结果包装在LOWCASE()函数中

Data test;
x="20161";
run;

您可以使用格式
PROC FORMAT
允许您创建自己的格式来更改数据的外观:如果您关心两位数的月份,两位数的月份将如何显示?"201610"?
Data test;
x="20161"; *the input;
y = mdy(substr(x,5),1,substr(x,1,4)); *a temporary intermediate variable that's a date/numeric var;
z = lowcase(put(y, MONYY7.)); *convert back to string in the desired format, and lowercase it;
drop y; *no longer needed;
run;