Q:

Standardizing Heterogeneous Age Data in SPSS or Excel

I'm trying to standardize a column of Age data (i.e. into years old / months old) using SPSS / SPSS Syntax / Excel. My intuition is to use a series of DO IF loops i.e.: 
DO IF CHAR.INDEX(Age, "y")>1... for years
DO IF CHAR.INDEX(Age, "m")>1... for months
DO IF CHAR.INDEX(Age, "d")>1... for days

and have the program reference the number(s) immediately preceding the string as a quantity of years / months / days and add it to a total in a new variable which could be in days (the smallest unit) which could later be converted to years. 
For example for a cell "3 yr 5 mo": add 3*365 + 5*30.5 = 1248 days old to a new variable (something like "DaysOld").
Examples of Cell contents (numbers without any strings assumed to be years):
2    
5 months    
11 days    
1.7    
13 yr    
22 yrs    
13 months    
10 mo    
6/19/2016    
3y10m    
10m    
12y    
3.5 years    
3 years    
11 mos    
1 year 10 months    
1 year, two months    
20 Y    
13 y/o    
3 years in 2014

A:

The following syntax will solve a lot of cases, but definitely not all of them (eg. "1.7" or "3 years in 2014"). You'll need to do more work on it, but this should get you started nicely...
First I recreate your sample data to work with:
data list list/age (a30).
begin data
"2"
"5 months"
"11 days"
"1.7"
"13 yr"
"22 yrs"
"13 Months"
"10 mo"
"6/19/2016"
"3y10m"
"10m"
"12y"
"3.5 years"
"3 YEARS"
"11 mos"
"1 year 10 months"
"1 year, two months"
"20 Y"
"13 y/o"
"3 years in 2014"
end data.

Now to work:
* some necessary definitions.

string ageCleaned (a30) chr (a1) nm d m y (a5).
compute ageCleaned="".

* my first step is to create a "cleaned" age variable (it's possible to 
  manage without this variable but using this is better for debugging and
  improving the method).
* in the `ageCleaned` variable I only keep digits, periods (for decimal 
  point) and the characters "d", "m", "y".

do if CHAR.INDEX(lower(age),'ymd',1)>0.
loop #chrN=1 to char.length(age).
   compute chr=lower(char.substr(age,#chrN,1)).
   if CHAR.INDEX(chr,'0123456789ymd.',1)>0 ageCleaned=concat(rtrim(ageCleaned),chr).
end loop.
end if.

* the following line accounts for the word "days" which in the `ageCleaned` 
  variable has turned into the characters "dy".

compute ageCleaned=replace(ageCleaned,"dy","d").
exe.

* now I can work through the `ageCleaned` variable, accumulating digits 
  until I meet a character, then assigning the accumulated number to the
  right variable according to that character ("d", "m" or "y").

compute nm="".
loop #chrN=1 to char.length(ageCleaned).
   compute chr=char.substr(ageCleaned,#chrN,1).
   do if CHAR.INDEX(chr,'0123456789.',1)>0.
      compute nm=concat(rtrim(nm),chr).
   else.
      if chr="y" y=nm.
      if chr="m" m=nm.
      if chr="d" d=nm.
      compute nm="".
   end if.
end loop.
exe.

* we now have the numbers in string format, so after turning them into 
  numbers they are ready for use in calculations.

alter type d m y (f8.2).
compute DaysOld=sum(365*y, 30.5*m, d).

