2016-04-19 150 views
1

找到出生日期我有一个具有VisitDate和AgeAtVisit的数据集。我需要DateOfBirth。SAS从年龄

我知道如果我从VisitDate和DateOfBirth去,我可以从 计算AgeAtVisit AgeAtVisit = intck('year',DateOfBirth,VisitDate);

但是我不确定如何倒退。

我的数据是这样:

ID  VisitDate  AgeAtVisit 
    1   01/01/2000  73.25 
    2   03//03/2000  74.22 
    3   06/06/2006  65.30 

我怎样才能从这里到出生日期?

我想过尝试做手工的方程式像

age = (Date of visit -date of birth)/365.25 

,但我不能只重排,因为我不能访问的日期减去年龄。我不能使用YearDiff,因为我只有一个日期。我不认为我可以使用intck。有什么建议么?

回答

1

你绝对可以做你的建议。日期是自1960年1月1日以来的天数,因此您可以增加/减少不受惩罚的天数。尽管如此,鉴于闰年的不完善(2000年是一个闰年,幸运的是,除非你有116人以上的人,否则你可能没事)。

data have; 
input ID  VisitDate :mmddyy10. AgeAtVisit; 
format visitDate date9.; 
datalines; 
    1   01/01/2000  73.25 
    2   03/03/2000  74.22 
    3   06/06/2006  65.30 
;;;; 
run; 

data want; 
    set have; 
    dateOfBirth = visitDate - 365.25*ageAtVisit; 
    format dateOfBirth date9.; 
run; 

如果你确实需要完美的准确性,你需要的东西比你有什么更好的AgeAtVisit

+0

谢谢。我希望完美的准确性,但看到这是我得到的数据将不得不做。所以,因为日期是数字,我基本上可以用它们作为所有类似方程中的数字。这就说得通了。我以为我不能,因为我们有intx和yeardiff。但我想这只是闰年的修正。 –

+0

'intnx'和'yeardiff'只是方便的功能 - 任何事情你都无法从根本上做到,只是更复杂。我认为'intnx'可能会接受一个非整数的年数,但不幸的是它没有。 – Joe

+0

有趣。谢谢。 –