Как эффективно переименовывать переменные с помощью sas

У меня есть набор данных SAS DATA, который содержит 100 переменных. К сожалению, этот набор данных не содержит названия каждой переменной. Он просто называет переменную как VAR1 - Var100. У меня есть отдельный файл, в котором перечислены имена каждой переменной Name (по одному имени на ячейку). Я не хочу переименовывать его по одному, поэтому следующий код не подходит.

data lib.test (rename = (var1= truename1 var2 = truename2 ...) ;
   set lib.test;
run;

Следуя предложениям Риза, я пытаюсь реализовать следующее решение http://stackoverflow.com/questions/29006915/rename-variable-regardless-of-its-name-in-sas.

proc sql;
   /* Write the individual rename assignments */
   select strip(name) || " = " || substr("ABCDEFGHIJKLMNOPQRSTUVWXYZ", varnum , 1)

   /* Store them in a macro variable and separate them by spaces */
   into :vars separated by " "

   /* Use a sas dictionary table to find metadata about the dataset */
   from sashelp.vcolumn
   where libname = "LIB"
     and memname = "TEST"
     and 1 <= varnum <= 100;
quit;

proc datasets lib=lib nolist nodetails;
   modify test;
   rename &vars.;
quit;

Теперь вместо использования a,b,c,d... для переименования моей переменной я хочу использовать имя в наборе данныхName в качестве новых имен. Набор данных Name выглядит следующим образом (я могу транспонировать его, если им будет проще пользоваться). Порядок Name такой же, как последовательность переменных в наборе данных lib.test. Как я могу изменить приведенный выше код, чтобы добиться этого?

Name
name1
anc
sjsjd
mdmd

person fly36    schedule 13.04.2016    source источник
comment
Создайте набор данных со столбцами «старое имя» и «новое имя» и используйте его для создания пар имен оператора переименования.   -  person data _null_    schedule 13.04.2016


Ответы (1)


Вы можете преобразовать набор данных NAME, чтобы он имел как старые, так и новые имена, а затем использовать их для создания пар переименований.

data name_pairs;
  set name ;
  old_name = cats('VAR',_n_);
run;

proc sql noprint ;
  select catx('=',old_name,name)
    into :vars separated by ' ' 
    from name_pairs
  ;
quit;

Затем вы можете использовать переменную макроса VARS в своем операторе переименования.

person Tom    schedule 13.04.2016