Rick, I would like to use heat map if there are too many lines need to draw, that could messed up .

filename x url 'http://blogs.sas.com/content/iml/files/2016/06/LE2.csv';
PROC IMPORT OUT= WORK.LifeExpectancy
DATAFILE=x
DBMS=CSV REPLACE;
GETNAMES=YES;
DATAROW=2;
RUN;

filename y url 'http://blogs.sas.com/content/iml/files/2016/06/LifeExpectancyCountries.csv';
PROC IMPORT OUT= WORK.CountryCodes
DATAFILE= y
DBMS=CSV REPLACE;
GETNAMES=YES;
DATAROW=2;
RUN;

/* Step 3: Prepare data for plotting. Add formats. Convert from Wide to Long form */
proc sort data=LifeExpectancy(drop=Indicator_Code Indicator_Name) out=LEsort;
by Country_Code;
run;

proc format;
value IncomeFmt 1='High OECD' 2='High nonOECD'
3='Upper Middle' 4='Lower Middle'
5='Low';
run;

data LL2;
merge LEsort CountryCodes(drop=SpecialNotes);
by Country_Code;
if IncomeGroup="High income: OECD" then Income=1;
else if IncomeGroup="High income: nonOECD" then Income=2;
else if IncomeGroup="Upper middle income" then Income=3;
else if IncomeGroup="Lower middle income" then Income=4;
else if IncomeGroup="Low income" then Income=5;
else delete;
format Income IncomeFmt.;
run;

proc sort data=LL2;
by Income Country_Code;
run;

/* transpose from wide to long */
data LE;
set LL2;
array Yr[*] Y1960-Y2014;
do i = 1 to dim(Yr);
Year = 1960 + (i-1);
Expected = Yr[i];
output;
end;
label Expected = "Life Expectancy at Birth (years)";
drop i Y1960-Y2015;
run;

proc sort data=LE; by Country_Name;run;
proc transpose data=LE out=want(drop=_:) prefix=Y;
by Country_Name;
id year;
var Expected;
run;

ods graphics /reset height=8000 width=4000;
proc iml ;
use want;
read all var _num_ into x[c=vnames r=Country_Name];
close ;
call HeatmapCont(x) COLORRAMP='rainbow' yvalues=Country_Name
xvalues=vnames displayoutlines=0
title="Life Expectancy at Birth for 207 Countries";
quit;