2016-04-13 40 views
0

我得到了一個包含100個變量的SAS數據集DATA。不幸的是,這個數據集不包含每個變量的名稱。它只是將變量命名爲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; 

,而是採用A,B,C,d ...重命名我的變量,我想使用的名稱上的數據集Name作爲新的名字。數據集Name看起來像以下(如果它更容易使用,我可以轉置它)。 Name的順序與數據集lib.test中的可變順序相同。我怎樣才能改變上面的代碼來實現這一目標?

Name 
name1 
anc 
sjsjd 
mdmd 
+0

用列old-name和new-name創建一個數據集,並使用它來生成重命名語句名稱對。 –

回答

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