date - SAS:将 YEAR 和 MONTH 数据合并为单个 mm/dd/yyyy 日期,而不更改类型

标签 date datetime sas

问题:如何将 YEAR 和 MONTH 数据合并为单个 mm/dd/yyyy 日期,而不从数字类型转换为字符类型?


我有需要读入 SAS 的日期数据。它分为两列:YEAR 和 MONTH。数据看起来与此类似:

 YEAR MONTH
 2012 1
 2012 1
 2013 10
 2012 2
 2014 7

数据必须以 mm/dd/yyyy 格式存储。例如,YEAR = 2013 和 MONTH = 10 对应于 10/01/2013。

我通过以下方式完成了此任务:

if month = 1 then
  date = input(compress("01/01/"||year),mmddyy10.);
else if month = 2 then
  date = input(compress("02/01/"||year),mmddyy10.);
...

但是,日志给出了以下注释:

NOTE: Numeric values have been converted to character values at the places given by: (Line):(Column).

据我了解,这样做是因为 SAS 将自 1960 年 1 月 1 日起的日期存储为数值。 压缩函数返回字符值。因此,数字数据被强制转换为字符类型。

虽然上面的代码充分解决了我的问题,但注释暗示不应以这种方式处理日期格式(通过类型转换)。

最佳答案

使用mdy()函数:

date = mdy(month, 1, year)

关于date - SAS:将 YEAR 和 MONTH 数据合并为单个 mm/dd/yyyy 日期,而不更改类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38956397/

相关文章:

MYSQL用户统计查询求助?

php - 在 PHP 5.2 中模仿 PHP 5.3 DateTime

MySql 查询以选择具有特定日期的记录

sas - 变量列表中的通配符

mysql - SAS/PROC-SQL 从具有唯一键的表转换为具有相同键的多行表

ruby-on-rails - 获得最接近给定日期的发薪日的有效方法

python - 我如何使用 Python(精确到分钟)计算过去 30 天的时间?

php - 获取 30 天前的日期和时间

SAS:插入空白行

JavaScript 日期 : Why those two dates are different?