0

任意の SAS 日付に 1 日を追加したい。機能する次のコードがありますが、次のような日付計算のサポートが組み込まれているのではないかと思います。

proc fcmp outlib=whatever;  
function lastDayInYear(d);  
    if datdif(d,mdy(12,31,year(d)),'ACT/365')=0 then return(1); else return(0);  
endsub;  

function advanceDate(d);
    if d=. then return(.);
    if lastDayInYear(d) then
        return(mdy(1,1,year(d)+1));
    else
        return(datejul(juldate7(d)+1));
endsub;
quit;
4

3 に答える 3

9

日付は単なる数字なので、1 日を進めるには、1 を足すだけです。

そのコードはどこで見つけましたか? 大ハンマーを使ってナッツを割ることについて話してください...

于 2012-06-26T14:29:52.260 に答える
7

Itzy のとおりです... 1 を足すだけです。より高度な日付計算を行いたい場合は、 関数intnx()intck()関数を使用できます。

例えば

data _null_;
  tomorrow            = date() + 1;
  same_day_next_month = intnx('month',date(),1,'same');
  first_day_next_week = intnx('week' ,date(),1,'beginning');
  last_day_of_year    = intnx('year' ,date(),0,'end');

  put _all_; 
run;
于 2012-06-26T15:51:43.163 に答える
6

SASには、DATEまたはDATETIMEデータ型はありません。このような値は、一般的な数値データ型として格納されます。dateの場合、格納される数値は、表示される日付から1960年1月1日までの日数を表します。日時の場合も同様で、秒数のみが保存されます。これは、以下のコードで確認できます。人間が読み取れる日付、時刻、および日時の表現は、SASの日付/時刻形式を介して実現されます。詳細については、WebおよびドキュメントでSASの日付を検索してください。

質問に戻ります。DATEを表す値に1日を加算するには、数学的な加算を行うだけです:+1。

data _null_;
    length mydate mydatetime 8;
    mydate='1jan1960'd;
    mydatetime='1jan1960:00:00:00'dt;
    nextdate = mydate + 1;
    nextminute = mydatetime + 60;
    put mydate 8. +4 mydate yymmdds10.;
    put nextdate 8. +4 nextdate yymmdds10.;
    put mydatetime 12. +4 mydatetime datetime.;
    put nextminute 12. +4 nextminute datetime.;
run;
于 2012-06-26T14:32:02.607 に答える