SAS CATS函数返回期间而不是数字

时间:2019-06-14 15:00:18

标签: date sas concatenation

我正在尝试连接两个字段。我想显示日期中的月份和年份。

在cats函数之外单独使用时,这两个函数可以正确返回结果。

示例:2019年2月14日

MONTH(APP.SUBMITTEDON)返回2

YEAR(APP.SUBMITTEDON)返回2019

但是当我尝试将它们连接在一起时,如下所示,它返回./。而不是2/2019。

CATS(MONTH(APP.SUBMITTEDON),'/',YEAR(APP.SUBMITTEDON))为MONTH_YEAR

有想法吗?

完整代码是:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<div class="mole" id="mole1">
  <div class="left_ear"></div>
  <div class="right_ear"></div>
</div>
<div class="mole" id="mole2">
  <div class="left_ear"></div>
  <div class="right_ear"></div>
</div>
<div class="mole" id="mole3">
  <div class="left_ear"></div>
  <div class="right_ear"></div>
</div>

4 个答案:

答案 0 :(得分:0)

月份和年份函数返回INT

您需要字符

put(month(APP.SUBMITTEDON),z2.) 

或使用monyy格式。将日期显示更改为月份年份。

答案 1 :(得分:0)

您可以利用这是一个SAS日期并使用它。

proc sql;
create table COUNTS AS
select distinct COUNT.APP_ID AS COUNT
, put(datepart(app.submittedon), yymms10.) AS MONTH_YEAR
from APPLICANT
GROUP BY MONTH_YEAR;
quit;

编辑:已修改以处理数据时间变量。

答案 2 :(得分:0)

该功能组合是正确的。您还有其他事情未在您的问题中列出:

创建一些示例数据:

data have;
  do date='31jan2019'd to '1feb2019'd;
    output;
  end;
run;

使用cats()month()year()测试针对它的基本查询:

proc sql ;
  create table counts as
  select date,
         month(date) as month,
         year(date) as year,
         cats(month(date),'/',year(date)) as month_year1,
         put(date,yymms7.) as month_year2
         put(date,yymmn6.) as month_year3
  from have
  ;
quit;

我还以其他一些方式使用各种格式将日期变量表示为月/年。

最后,在同一SQL查询中同时使用distinct子句和group by子句是一个非常糟糕的主意。请仔细检查您打算在此处执行的操作,因为这样看来,查询可能无法给出预期的结果,并且很难确定其意图。

答案 3 :(得分:0)

CATS()函数将使用分配给MISSING选项的字符来缺少数字值。您可以将缺少的选项更改为空格,然后句点将不会出现。

但是从对其他一些答案的评论来看,您似乎真正的问题是您正在处理DATETIME变量而不是DATE变量。 SAS将DATE值存储为自1960年以来的天数,而DATETIME值存储为秒数。如果以秒而不是天为单位给出数字,则MONTH()和YEAR()之类的功能将无法正常工作。

另外,由于SAS已经具有可以为您返回该字符串的格式,因此也无需提取月份和年份并将其粘贴回去。例如,您可能要使用MONYY格式(或DTMONYY作为日期时间值)。

create table COUNTS AS
select put(submittedon,dtmonyy.) as month_year
     , count( distinct APP_ID) AS COUNT
from APP
GROUP BY MONTH_YEAR
;

请注意,您可能希望使用将YEAR放在MONTH之前的格式,以便新字符变量的值能够正确排序。

create table COUNTS AS
select substr(put(datepart(submittedon),yymmdds10.),1,7) as month_year
     , count( distinct APP_ID) AS COUNT
from APP
GROUP BY MONTH_YEAR
;