If you can use a data step to process your dimension table: [pre] data new ;
set dimens.table ;
compo_key = catx( '-', of keypart1-keypart4 ) ;
row +1 ;
run ; [/pre]
The CATX() function will handle mixed data-types among the variables that it concatenates.[pre] row +1 ;[/pre] will provide a row number variable in the "WORK.NEW" output table.
A real reduction of sql data management is offered by the special option for PROC APPEND that seems little known, [pre] UNIQUEsave = Replace[/pre] It replaces rows with matching key, and appends new rows.
( however even with this option this proc append won't add columns. )
The only reason I can think of to explain why UNIQUEsave=Replace is seldom offered as a solution for your situation is that this option value is difficult to find documented and "Scalable Performance Data Engine" on which it depends, seems outside of "mainstream" SAS even though it is part of base SAS and a significant enhancement for performance.
Scalable Performance Data Engine is certainly worth a look for scaling up performance. ... ... It has a big brother in the SPD Server for situations where performance pays.