data _null_; format start end yymmdds10.; start = '01mar1992'd; end = '01mar1999'd; /* BUG */ dif = yrdif(start,end,'ACT/ACT'); put _all_; dif = intck('YEAR', start, end); /* 今年の誕生日がまだ来ていない場合は、数え年から1を引きます */ if (month(end) < month(start)) then dif = dif - 1; else if (month(end) = month(start)) and day(end) < day(start) then dif = dif - 1; put _all_; run;
SASプログラムとログを解析するユーティリティを開発するための備忘録です。This is a memo to develop utility that analyzes the SAS log.
2013年2月16日土曜日
年齢の計算
YRDIFを年齢の計算に使っていましたが、不具合があることに気がつきました。結局、古典的なコードを引っ張り出して計算しています。
登録:
コメントの投稿
(
Atom
)
私は複数行になるのが嫌いで、
返信削除日付まで求めるときは、大昔からこんな風にしてます。
一行がなが~いですけどね。
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;
突然に申し訳ございません、メッセージフォームがなかったため、コメントからご連絡させていただきます。私、「データステップ100万回 SAS新手一生」(http://sas-tumesas.blogspot.jp/)というSASの主にデータステップのテクニックについて紹介するブログをやっているSASYAMAと申します。私自身はシステム系ではなく、医薬系のSASプログラマで、他の言語もほとんどわからないため御ブログの内容で、わからない部分も多いのですが、わからないなりに以前から参考にさせていただいております。
返信削除日本語によるSASの情報の公開は大変少ないので、貴重だと考えています。もしご迷惑でなければ、リンクの方をはらせていただけたらと思います。何卒ご一考のほどよろしくお願いいたします。
SASYAMA