Я пытаюсь переименовать столбцы в фрейме данных:
data work.baseline;
set work.ehp30 (keep = Pat_TNO AssNo pain -- family sexual -- infertile);
where AssNo = 1;
run;
Который возвращает фрейм данных в work.baseline
со столбцами Pat_TNO
, AssNo
и 11 столбцами между pain
и infertile
. Я хотел бы переименовать 11 столбцов в baseline_pain
, baseline_infertile
и т. д., не затрагивая Pat_TNO
и AssNo
. Как я могу это сделать?
Посмотрите, можете ли вы использовать это в качестве примера. Здесь я переименовываю все переменные, кроме Name и Sex, чтобы они имели префикс «baseline_».
data class;
set sashelp.class;
run;
data test;
set sashelp.vcolumn end = z;
where libname='WORK' and memname='CLASS' and name not in ('Name', 'Sex');
if _n_ = 1 then
call execute('proc datasets lib=work nolist; modify class;');
call execute(compbl(cat('rename ', name, '= baseline_', name, ';')));
if z then call execute('quit;');
run;
proc contents data = class;
run;
Вот альтернативный способ, не связанный со словарной таблицей.
data have;
retain A B C D E F G H I J K L 0;
stop;
run;
data _null_;
dsid = open ('work.have(keep=c--g)');
if dsid;
call execute ('proc datasets nolist lib=work;modify have;rename');
do _n_ = 1 by 1 until (sysmsg()=:'ERROR');
name = varname(dsid,_n_);
if not missing(name) then
call execute (catx('=',name,'baseline_'||name));
end;
call execute (';quit;');
run;
Некоторые модификации, но получилось, спасибо!