And if we need a macro variable created for each country we can do:

data new;
BASE = "The rain in stays mainly in the plain";
INSPOS = find(BASE,"stays");
set countries;
length PHRASE $50.;
PHRASE = catx(" ",substr(BASE,1,INSPOS-1),COUNTRY,substr(BASE,INSPOS));
call symputx(COUNTRY,PHRASE);
run;

So deriving PHRASE in a data step for each country and then having the first argument of CALL SYMPUTX the variable that holds the names of all countries. At each data step iteration, a new macro variable will be created which is considered a data-driven derivation.