SAS中的日期格式

时间:2014-03-06 09:58:16

标签: r date sas

我有一个需要转换为R的SAS代码。

我的SAS代码是这样的 -

proc sql;
  create table data as
   select a.*,b.qty from Sales as a inner join Units as b 
   on a.id=b.id and put(a.date,yymmn6.)=put(c.date,yymmn6.)
quit;

我知道put(a.date,yymmn6。)将日期转换为SAS日期值。但是a.date在这个功能之后变成了什么?如果date = 01jan2012,put(a.date,yymmn6。)将其设为某个代表201201或20120101的SAS值?即创建的SAS值是代表整个日期还是仅代表日期和日期?

目前,我正在为此编写R代码 -

data <- sqldf("select a.*,b.qty from Sales as a inner join Units as b 
   on a.id=b.id and a.date=c.date")

我应该这样做 -

Sales$date <- as.yearmon(Sales$date)
Units$date <- as.yearmon(Units$date)

data <- sqldf("select a.*,b.qty from Sales as a inner join Units as b 
   on a.id=b.id and a.date=c.date")

我无法访问SAS,因此,我无法对示例数据进行尝试。任何帮助都会很棒。谢谢!

2 个答案:

答案 0 :(得分:1)

put(a.date,yymmn6。)将数字日期值转换为存储为yyyymm的字符值(例如201201)。因此,连接条件匹配月份和年份相同的所有日期,但不一定是日期。 我不确定在R中实现这一目标的最佳方法,但您似乎对此有一些想法。 希望这会有所帮助。

答案 1 :(得分:1)

使用put(a.date,yymmn6.)时,该函数的输出是一个字符。 Put采用数字输入并格式化并输出格式化的数值作为字符。 input功能恰恰相反。

data mydata;
sas_numeric_date = "01jan2012"d;
sas_yyyymm_char_date = put(sas_numeric_date, yymmn6.);
sas_yyyymm_numeric_date = input(sas_yyyymm_char_date, yymmn6.);
output;
sas_numeric_date = "29Feb2012"d;
sas_yyyymm_char_date = put(sas_numeric_date, yymmn6.);
sas_yyyymm_numeric_date = input(sas_yyyymm_char_date, yymmn6.);
output;
format sas_numeric_date sas_yyyymm_numeric_date date9.;
run;

sas_numeric_date    sas_yyyymm_char_date    sas_yyyymm_numeric_date
01Jan2012               201201                        01Jan2012
29Feb2012               201202                        01Feb2012

因此,当您将yymmn6.作为信息应用于sas_yyyymm_char_date(其本身为yyyymm格式)时,结果值为数字,day部分日期默认为第一天如上所示的月份。