2013年2月16日土曜日

年齢の計算

YRDIFを年齢の計算に使っていましたが、不具合があることに気がつきました。結局、古典的なコードを引っ張り出して計算しています。

  1. data _null_;  
  2.         format start end yymmdds10.;  
  3.   
  4.         start = '01mar1992'd;  
  5.         end = '01mar1999'd;  
  6.   
  7.         /* BUG */  
  8.         dif = yrdif(start,end,'ACT/ACT');  
  9.         put _all_;  
  10.   
  11.         dif = intck('YEAR', start, end);  
  12.   
  13.         /* 今年の誕生日がまだ来ていない場合は、数え年から1を引きます */  
  14.         if (month(end) < month(start)) then  
  15.                 dif = dif - 1;  
  16.         else if (month(end) = month(start)) and day(end) < day(start) then  
  17.                 dif = dif - 1;  
  18.   
  19.         put _all_;  
  20. run;  

2 件のコメント :

  1. ともちゃん2013年2月25日 13:16

    私は複数行になるのが嫌いで、
    日付まで求めるときは、大昔からこんな風にしてます。
    一行がなが~いですけどね。

    data _null_;
    birth='01mar1992'd;
    base='01mar1999'd;

    age=(year(base)-year(birth))-(month(base)<month(birth) or (month(base)=month(birth) and day(base)<day(birth)));

    put age=;
    run;

    返信削除
  2. 突然に申し訳ございません、メッセージフォームがなかったため、コメントからご連絡させていただきます。私、「データステップ100万回 SAS新手一生」(http://sas-tumesas.blogspot.jp/)というSASの主にデータステップのテクニックについて紹介するブログをやっているSASYAMAと申します。私自身はシステム系ではなく、医薬系のSASプログラマで、他の言語もほとんどわからないため御ブログの内容で、わからない部分も多いのですが、わからないなりに以前から参考にさせていただいております。
    日本語によるSASの情報の公開は大変少ないので、貴重だと考えています。もしご迷惑でなければ、リンクの方をはらせていただけたらと思います。何卒ご一考のほどよろしくお願いいたします。
    SASYAMA

    返信削除