Sql 统计SAS中一个月的天数

Sql 统计SAS中一个月的天数,sql,sas,Sql,Sas,我希望得到在SAS一个月的天数。我的日期格式是yyyymm(例如201701),我想记录一个月的天数。数据按月重复出现(201701201702…等)。我尝试将Day函数与EOMONTH一起使用,但是SAS会选择201701的SAS日期。我不熟悉SAS编码,如有任何帮助,我将不胜感激。SAS日期值为数字类型,其值为自1960年1月1日起的天数 您需要首先了解表示变量的日期是什么类型的值。 是: 在意义位置Y M处带有数字字母的字符类型 日期编码为值100*年+月的数字类型 如果EOMONTH

我希望得到在SAS一个月的天数。我的日期格式是yyyymm(例如201701),我想记录一个月的天数。数据按月重复出现(201701201702…等)。我尝试将Day函数与EOMONTH一起使用,但是SAS会选择201701的SAS日期。我不熟悉SAS编码,如有任何帮助,我将不胜感激。

SAS日期值为数字类型,其值为自1960年1月1日起的天数

您需要首先了解表示变量的日期是什么类型的值。 是:

  • 在意义位置Y M处带有数字字母的字符类型
  • 日期编码为值100*年+月的数字类型
如果EOMONTH是字符,则需要将其转换为包含一天的SAS日期值。对于“月”值,该天通常设置为1。例如:

data _null_;
  myDateString = '201701';
  * note the ||'01' that makes myDate be the first of the month;
  myDate = input (trim(myDateString)||'01', yymmdd8.);
  format myDate yymmd.;
  put myDate=;
  put myDate= 12.; * Show in LOG the date as number of days from reference;
run;
----- LOG -----
myDate=2017-01
myDate=20820
data have;
  myDateNumber = 201701;
  * note the , 1 that makes myDate be the first of the month;
  myDate = mdy ( mod(myDateNumber,100), 1, myDateNumber / 100);
  format myDate yymmd.;
  put myDate=;
  put myDate= 12.; * What date value is 'unformatted' is the number of days from reference;
run;
----- LOG -----
myDate=2017-01
myDate=20820
有时,您会得到表示数据的日期,这些数据是数字的,经过编码,在查看时显示为YYYYMM。这些值还需要转换为SAS日期值。例如:

data _null_;
  myDateString = '201701';
  * note the ||'01' that makes myDate be the first of the month;
  myDate = input (trim(myDateString)||'01', yymmdd8.);
  format myDate yymmd.;
  put myDate=;
  put myDate= 12.; * Show in LOG the date as number of days from reference;
run;
----- LOG -----
myDate=2017-01
myDate=20820
data have;
  myDateNumber = 201701;
  * note the , 1 that makes myDate be the first of the month;
  myDate = mdy ( mod(myDateNumber,100), 1, myDateNumber / 100);
  format myDate yymmd.;
  put myDate=;
  put myDate= 12.; * What date value is 'unformatted' is the number of days from reference;
run;
----- LOG -----
myDate=2017-01
myDate=20820
还有其他方法可以将日期的字符或数字表示形式转换为SAS日期值。请注意,在SAS中查看变量时,需要了解变量类型和查看器应用的格式

获得SAS日期值后,可以使用SAS间隔函数INTCK和INTNX计算日期月份的天数

days_in_month = intck ('days', /* how many days between next two args */
  intnx('month', mydate, 0),  /* advance mydate to first of month */
  intnx('month', mydate, 1)   /* advance mydate to first of next month */
);

无论日期值的月份是哪一天,此公式都有效。

这一点不清楚。你有什么?你需要什么?2017年1月只有31天?或者它与您的数据有什么关系?你需要发布更多的信息和你尝试过的东西。例如,我不知道EOMOUNT是什么。非常感谢Richard。我的数据是一个数字表示,你的公式对我有用。非常感谢你的帮助,而我意识到我的问题有点含糊不清,没有太多需要的信息!!你的回答对理解逻辑也很有帮助!您还可以使用
yymmn6.
informat将数字转换为日期<代码>myDate=输入(输入(myDateNumber,6.),yymmn6.)。默认为每月的第一天