SAS从CSV导入提取日期,然后提取月份

SAS从CSV导入提取日期,然后提取月份,csv,sas,Csv,Sas,我在SAS Enterprise Guide中导入了一个csv,日期列中的值为44165。这是Excel中2020年11月30日的值?如何让SAS从该值中提取月份为“Nov”?我必须先将这个数值转换成日期吗 提前感谢。您可能会,这取决于导入过程执行了什么操作。如果date是数字,则可以格式化变量 format date monname3.; 如果date是一个字符变量,则CSV中可能有一些行带有奇怪、缺失或日期值文本与其他date值的混合(可能有人在导出为CSV的原始数据源中输入了n/a或?)

我在SAS Enterprise Guide中导入了一个csv,日期列中的值为44165。这是Excel中2020年11月30日的值?如何让SAS从该值中提取月份为“Nov”?我必须先将这个数值转换成日期吗


提前感谢。

您可能会,这取决于导入过程执行了什么操作。如果
date
是数字,则可以格式化变量

format date monname3.;
如果
date
是一个字符变量,则CSV中可能有一些行带有奇怪、缺失或日期值文本与其他
date
值的混合(可能有人在导出为CSV的原始数据源中输入了
n/a

使用
input
将包含数字字符的字符值转换为数字

xls_epoch = '31DEC1899'D;
sas_date = input (xls_date,5.) + xls_epoch;

format sas_date monname.;
drop xls_date xls_epoch;

SAS通常不会使用正确格式化的CSV文件执行此操作。如果您使用文本编辑器查看CSV文件,它是否确实包含字符串
44165
,还是使用其他字符显示值?如果是,那么您是如何从Excel文件创建CSV文件的。请注意,CSV文件只是文本文件,而不是Excel文件,即使您的计算机默认使用Excel打开它们。感谢您尝试帮助我@Tom。感谢@Richard!这解决了我的疑问!如果数字字符串的值类似于
44165
,则仅将字符串转换为数字将无法正常工作。您还需要添加负数
'30DEC1899'd
,以根据不同的基准日期进行调整。好的观点@Tom。然而,格式为
MONNAME3.
的未更正日期在大多数情况下都将被视为“正确”(显示的月份名称),尽管该日期被源日历纪元关闭。您的XLS_纪元值被关闭1天。1900年是闰年。