You can use a _TEMPORARY_ array to hold the 1990 values (_TEMPORARY_ values are automatically retained). Then after output the 2018 value, you can calculate and output the 2047 values:
data have;
input cluster $27. emp lq year2 :date9. emp_share_perc;
format year2 date9. ;
datalines;
Accommodation and Food Svcs 12868 1.074518089 01Jan1990 6.2331372
Accommodation and Food Svcs 31869.5 1.281039607 01Jan2018 10.3577914
Advanced Materials 7477.416667 0.6539712 01Jan1990 3.6219897
Advanced Materials 3339.25 0.3381481 01Jan2018 1.0852776
Agribusiness 5567.5 0.928833971 01Jan1990 2.6968442
Agribusiness 3619.5 0.494140709 01Jan2018 1.1763607
Biomedical 673.8333333 0.279438995 01Jan1990 0.3263985
Biomedical 863.5 0.236455726 01Jan2018 0.280643
run;
data want (drop=i);
set have;
by cluster;
output;
array tmp {3} _temporary_;
array var {3} emp lq emp_share_perc;
if year2='01jan1990'd then do i=1 to 3;
tmp{i}=var{i};
end;
if year2='01jan2018'd;
year2='01jan2047'd;
do i=1 to 3;
var{i}=2*var{i}-tmp{i};
end;
output;
run;
This program assumes each cluster has one 1990 record followed by one 2018 record.