2016-04-13 2 views
0

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

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

Эти предложения Reeze, я пытаюсь реализовать следующее решение 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; 

Теперь, вместо того, чтобы использовать, B, C, D ... переименовать мою переменную, я хочу использовать имя набора данных Name как новые имена. Dataset Name выглядит следующим образом (я могу транспонировать его, если он проще в использовании). Порядок Name совпадает с переменной последовательностью в наборе данных lib.test. Как я могу изменить код выше, чтобы достичь этого?

Name 
name1 
anc 
sjsjd 
mdmd 
+0

Создайте набор данных со столбцами old-name и new-name и используйте их для генерации пар имен имен rename. –

ответ

3

Вы можете конвертировать 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 в своем переименовании заявлении.

Смежные вопросы