簡體   English   中英

如何在SAS中以yyyymm格式獲取兩個日期之間的所有yyyymm日期?

[英]How to get all the yyyymm dates between two dates which are in yyyymm format in SAS?

我有兩個不同的日期201509和201608。我想以yyyymm格式獲取它們之間的所有日期,例如(201509,201510,201511,201512,201601,201602,201603,201604,201605,201606,201607,201608)。 問題是幾年之間的幾個月。 另外,這幾個月一直在變化,可能只是201601到201612。這是每天運行的代碼,我正在嘗試在SAS中使其自動化。 任何幫助表示贊賞!

SAS具有使您輕松執行此操作的功能,但是您必須首先將日期轉換/讀取為“ SAS日期”。 然后,您可以使用INTCK來計算開始和結束之間的月份,並使用INTNX來創建新的月份日期值。

data months;
   input (start end)(:yymmn.);
   format start end yymm.;
   do i = 0 to intck('month',start,end);
      month = intnx('month',start,i);
      output;
      end;
   format month yymm.;
   cards;
 201509 201608
 ;;;; 
   run;
proc print;
   run;

如果它們已經是日期格式,則在間隔上添加一天,它可以像

where date between '01Jan2016'd and '31Dec2016'd;

如果您每天都無法弄清楚邏輯,則可以創建將為您完成的宏變量。

%let start=201601;
%let end=201612;
%let start_date = %sysfunc(inputn(&start, yymmn6.), date9.);
%let end_date = %sysfunc(intnx(month, %sysfunc(inputn(&end, yymmn6.)), 0, end), date9.);
%put &start_date.;
%put &end_date;

邏輯如下。

   For intY = intStartYear To intEndYear
      If intY = Value(intEndYear) Then intZ = Value(intEndMonth) Else intZ = 12
      For intX = intStartMonth To intZ
         If intX < 10 Then
            Print intY & "0" & intX
         Else
            Print intY & intX
         End If
      Next intX
      intStartMonth = 1
   Next intY

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM