Просто добавьте немного больше логики к шагу, который записывает данные, чтобы они также записывали имена.
data _null_ ;
file temp ;
if _n_=1 then do;
do _n_=1 to &cols ;
set cnt(keep=name rename=(name=__name__)) ;
put __name__ @;
end;
put;
end;
set &sds ;
put &vars ;
run ;
Ваш код для получения имен переменных и подсчета строк и столбцов также может быть проще.
proc sql noprint;
select nobs
, name
into :rows trimmed
, :vars separated by ' '
from cnt
;
%let cols = &sqlobs ;
quit;
Вашему оператору FILENAME не требуется% TRIM (), и в нем отсутствовало +
, необходимое для добавления одной строки для заголовка. Сделано так, будто оно ссылается на &row1
вместо &row
.
filename temp dde "excel|&xlssht.!r&row.c&col.:r%eval(&rows+&row+1)c%eval(&cols+&col)" ;