/* Program to accompany Wicklin, R., "Visualize the ages of US presidents" Published 14Nov2016 at The DO Loop blog http://blogs.sas.com/content/iml/2016/11/14/viz-age-us-president.html Data from https://en.wikipedia.org/wiki/List_of_Presidents_of_the_United_States_by_age */ data Presidents; input @1 N 2. @4 President $23. @28 BirthDate anydtdte12. @44 InaugurationDate anydtdte12. @60 PresidencyEndDate anydtdte12. ; /* use the YRDIF function to compute ages */ AgeAtInauguration = yrdif(BirthDate, InaugurationDate, 'ACT/ACT'); AgeAtEndDate = yrdif(BirthDate, PresidencyEndDate, 'ACT/ACT'); format BirthDate InaugurationDate PresidencyEndDate DATE10.; label AgeAtInauguration="Age at First Inauguration" AgeAtEndDate="Age at End of Term" InaugurationDate="Inauguration Date"; /* get last names to use as labels */ LastName = scan(President, countw(President)); if AgeAtInauguration<=50 | AgeAtInauguration>=65 then Label= LastName; else Label=" "; datalines; 1 George Washington Feb 22, 1732 Apr 30, 1789 Mar 4, 1797 2 John Adams Oct 30, 1735 Mar 4, 1797 Mar 4, 1801 3 Thomas Jefferson Apr 13, 1743 Mar 4, 1801 Mar 4, 1809 4 James Madison Mar 16, 1751 Mar 4, 1809 Mar 4, 1817 5 James Monroe Apr 28, 1758 Mar 4, 1817 Mar 4, 1825 6 John Q. Adams Jul 11, 1767 Mar 4, 1825 Mar 4, 1829 7 Andrew Jackson Mar 15, 1767 Mar 4, 1829 Mar 4, 1837 8 Martin Van Buren Dec 5, 1782 Mar 4, 1837 Mar 4, 1841 9 William H. Harrison Feb 9, 1773 Mar 4, 1841 Apr 4, 1841 10 John Tyler Mar 29, 1790 Apr 4, 1841 Mar 4, 1845 11 James K. Polk Nov 2, 1795 Mar 4, 1845 Mar 4, 1849 12 Zachary Taylor Nov 24, 1784 Mar 4, 1849 Jul 9, 1850 13 Millard Fillmore Jan 7, 1800 Jul 9, 1850 Mar 4, 1853 14 Franklin Pierce Nov 23, 1804 Mar 4, 1853 Mar 4, 1857 15 James Buchanan Apr 23, 1791 Mar 4, 1857 Mar 4, 1861 16 Abraham Lincoln Feb 12, 1809 Mar 4, 1861 Apr 15, 1865 17 Andrew Johnson Dec 29, 1808 Apr 15, 1865 Mar 4, 1869 18 Ulysses S. Grant Apr 27, 1822 Mar 4, 1869 Mar 4, 1877 19 Rutherford B. Hayes Oct 4, 1822 Mar 4, 1877 Mar 4, 1881 20 James A. Garfield Nov 19, 1831 Mar 4, 1881 Sep 19, 1881 21 Chester A. Arthur Oct 5, 1829 Sep 19, 1881 Mar 4, 1885 22 Grover Cleveland Mar 18, 1837 Mar 4, 1885 Mar 4, 1889 23 Benjamin Harrison Aug 20, 1833 Mar 4, 1889 Mar 4, 1893 24 Grover Cleveland Mar 18, 1837 Mar 4, 1893 Mar 4, 1897 25 William McKinley Jan 29, 1843 Mar 4, 1897 Sep 14, 1901 26 Theodore Roosevelt Oct 27, 1858 Sep 14, 1901 Mar 4, 1909 27 William H. Taft Sep 15, 1857 Mar 4, 1909 Mar 4, 1913 28 Woodrow Wilson Dec 28, 1856 Mar 4, 1913 Mar 4, 1921 29 Warren G. Harding Nov 2, 1865 Mar 4, 1921 Aug 2, 1923 30 Calvin Coolidge Jul 4, 1872 Aug 2, 1923 Mar 4, 1929 31 Herbert Hoover Aug 10, 1874 Mar 4, 1929 Mar 4, 1933 32 Franklin D. Roosevelt Jan 30, 1882 Mar 4, 1933 Apr 12, 1945 33 Harry S. Truman May 8, 1884 Apr 12, 1945 Jan 20, 1953 34 Dwight D. Eisenhower Oct 14, 1890 Jan 20, 1953 Jan 20, 1961 35 John F. Kennedy May 29, 1917 Jan 20, 1961 Nov 22, 1963 36 Lyndon B. Johnson Aug 27, 1908 Nov 22, 1963 Jan 20, 1969 37 Richard Nixon Jan 9, 1913 Jan 20, 1969 Aug 9, 1974 38 Gerald Ford Jul 14, 1913 Aug 9, 1974 Jan 20, 1977 39 Jimmy Carter Oct 1, 1924 Jan 20, 1977 Jan 20, 1981 40 Ronald Reagan Feb 6, 1911 Jan 20, 1981 Jan 20, 1989 41 George H. W. Bush Jun 12, 1924 Jan 20, 1989 Jan 20, 1993 42 Bill Clinton Aug 19, 1946 Jan 20, 1993 Jan 20, 2001 43 George W. Bush Jul 6, 1946 Jan 20, 2001 Jan 20, 2009 44 Barack Obama Aug 4, 1961 Jan 20, 2009 Jan 20, 2017 45 Donald Trump Jun 14, 1946 Jan 20, 2017 . ; proc format lib=work; value sign '21Mar2000'd - '19Apr2000'd = 'Aries' '20Apr2000'd - '20May2000'd = 'Taurus' '21May2000'd - '20Jun2000'd = 'Gemini' '21Jun2000'd - '22Jul2000'd = 'Cancer' '23Jul2000'd - '22Aug2000'd = 'Leo' '23Aug2000'd - '22Sep2000'd = 'Virgo' '23Sep2000'd - '22Oct2000'd = 'Libra' '23Oct2000'd - '21Nov2000'd = 'Scorpio' '22Nov2000'd - '21Dec2000'd = 'Sagittarious' /* split Capricorn to make two valid ranges */ /* that don't span the calendar boundary */ '22Dec2000'd - '31Dec2000'd = 'Capricorn' '01Jan2000'd - '19Jan2000'd = 'Capricorn' '20Jan2000'd - '18Feb2000'd = 'Aquarius' '19Feb2000'd - '20Mar2000'd = 'Pisces' other = 'Unknown'; run; data signs; /* So this column appears first */ retain President; length sign 8; format sign sign.; set presidents (keep=President BirthDate InaugurationDate); /* convert birthday to our normalized SIGN date */ sign = mdy(month(birthdate),day(birthdate),2000); run; ods html5 style=dove; proc print data=signs; var President sign; run; ods html5 style=dove; ods graphics on; proc freq data=signs order=freq; tables sign / plots=freqplot; run;