sas

2016-04-13 17 views
0

kullanarak değişkenleri verimli şekilde yeniden adlandırmak için 100 değişken içeren bir SAS veri kümesi DATA aldım. Ne yazık ki, bu veri kümesi her değişkenin adını içermiyor. Bu değişkeni VAR1 - Var100 olarak adlandırır. Her bir değişkenin adını Name (hücre başına bir ad) olarak listeleyen ayrı bir dosyam var. Aşağıdaki kodu bir seçenek değil, tek tek yeniden adlandırmak istemiyorum.sas

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

ardından dondurulması önerileri, aşağıdaki çözüm http://stackoverflow.com/questions/29006915/rename-variable-regardless-of-its-name-in-sas uygulamaya çalışıyorum.

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; 

Şimdi, bunun yerine a, b, c, d kullanarak ... benim değişkeni adlandırmak, ben yeni adları gibi veri kümesi Name üzerine adı kullanmak istiyorum. Veri Kümesi Name aşağıdaki gibi görünür (kullanımı daha kolaysa, bunu dönüştürebilirim). Name sırası, lib.test veri kümesindeki değişken dizi ile aynıdır. Bunu başarmak için yukarıdaki kodu nasıl değiştirebilirim?

Name 
name1 
anc 
sjsjd 
mdmd 
+0

Eski adı ve yeni adı sütunları olan bir veri kümesi oluşturun ve bunu yeniden adlandırma ifadesi adı çiftleri oluşturmak için kullanın. –

cevap

3

Sen hem eski hem de yeni isimler ve daha sonra yeniden adlandırma çiftleri oluşturmak için bu kullanmak için NAME veri kümesi dönüştürebilirsiniz.

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; 

Daha sonra yeniden adlandırma açıklamada makro değişken VARS kullanabilirsiniz.