That's typical case where views are useful. This will not slow down your append regardless of the size of the datasets:
[pre]
data DS1;
set SASHELP.CLASS(drop=WEIGHT);
data BASE;
set SASHELP.CLASS;
run;
data DS1_V/view=DS1_V;
retain WEIGHT 0;
set DS1;
run;
proc append base=BASE data=DS1_V;
run;
[/pre]
Hoping that one day the syntax:
[pre]
proc append base=BASE data=DS1 (variable= (WEIGHT length=8 value=0) );
run;
[/pre]
will be valid where the variable=() parameters use the same syntax as the attrib statement - plus the value= option - to create or modify variables for the whole datasets on the fly. The suggestion never made it to the ballot or anywhere else however.