【问题标题】:How to convert a SAS-date to a R-date (or SAS-datetime to R-datetime)如何将 SAS 日期转换为 R 日期(或将 SAS 日期时间转换为 R 日期时间)
【发布时间】:2019-10-18 15:28:03
【问题描述】:

有谁知道,如何将 sas-date (01JAN1990) 转换为 r-date(或将 sas 日期时间转换为 r 日期时间?)

df <- data.frame(date1 = c("01JAN1990", "02AUG2010"), date2=c("24DEC2016:11:60:60","25DEC2017:12:00:00"))
df$date1 <- as.character(df$date1)
df$date2 <- as.character(df$date2)
df

我可以将 as.Date(df$date1, "%d%m%Y") 与 m 的另一个值一起使用吗?


编辑:为什么我不能分割日期时间变量date2 的日期部分并应用 %d%B%Y?

df <- data.frame(date1 = c("01JAN1990", "02AUG2010"), date2=c("24DEC2016:11:60:60","25DEC2017:12:00:00"))
df$date1 <- as.character(df$date1)
df$date2 <- as.character(df$date2)
df %>% mutate(date3 = substr(date2, 1, 9),
              date4 = as.Date(date3, "%d%B%Y")) %>% glimpse()

这给了我 NA 值 (date4)

【问题讨论】:

  • 使用as.Date(df$date1, "%d%B%Y") 查看?strptime 了解所有格式% 代码。

标签: r date sas


【解决方案1】:

如果您仍然收到NAs,这里有一个解决方法

library(lubridate)
df <- data.frame(date1 = c("01JAN1990", "02AUG2010"), date2=c("24DEC2016:11:60:60","25DEC2017:12:00:00"))
df$date1 <- as.character(df$date1)
df$date2 <- as.character(df$date2)
#Sys.setlocale("LC_TIME", "C")

df %>% mutate(date3 = substr(date2, 1, 9),
              date4 = format(dmy(date3), "%d%^b%Y")) %>% glimpse()
#Output 
# Observations: 2
# Variables: 4
# $ date1 <chr> "01JAN1990", "02AUG2010"
# $ date2 <chr> "24DEC2016:11:60:60", "25DEC2017:12:00:00"
# $ date3 <chr> "24DEC2016", "25DEC2017"
# $ date4 <chr> "24DEC2016", "25DEC2017"

希望这是你想要的。

【讨论】:

  • 再次感谢!我发现问题是语言问题,我可以通过使用sys.setlocale() 来解决。月份在德语中的拼写略有不同。因此,在某些情况下日期转换失败。