2016-12-06 126 views
0

我有2個表:零售與我的數據和col_dic作爲列名字典。在col_dic中有2列 - eng_name和eng_name_bl。SAS名稱與空白重命名錶

因此次代碼:

data _null_; 
    set col_dic end = last; 
    if _n_ eq 1 then call execute('proc datasets nolist lib=work; modify retail; rename'); 
    call execute(catx('=', eng_name,eng_name_bl)); 
    if last then call execute(';quit;'); 
run; 

執行日誌後,給出了一個錯誤,它在後新列名的空白想要「=」。 我該如何避免它?


示例,它所做的工作:

所有的
data col_dic; 
    length eng_name eng_name_bl $20; 
    eng_name = 'AGE'; 
    eng_name_bl = 'AGE_FIX'; 
    output; 
    eng_name = 'HEIGHT'; 
    eng_name_bl = 'HEIGHT_FIX'; 
    output; 
run; 

data class; 
    set sashelp.class; 
run; 


data _null_; 
    set col_dic end = last; 
    if _n_ eq 1 then call execute('proc datasets nolist lib=work; modify class; rename'); 
    call execute(catx('=', eng_name,eng_name_bl)); 
    if last then call execute(';quit;'); 
run; 
+0

看起來您在第二次調用執行後沒有使用單引號。試試這個:call execute('catx(「=」,'eng_name','eng_name_bl')'); –

+0

它根本不起作用。 – user3013203

+0

你想改變表名或列名嗎?請提供生成錯誤消息的代碼的[完整可重現示例](http://www.stackoverflow.com/help/mcve)。 – user667489

回答

1

首先不這樣做。帶有空格的變量名稱在頸部疼痛。爲什麼不使用空格的值作爲LABEL而不是NAME?

如果你想指定包含空格,那麼你需要確保設置

option validvarname=any; 

然後在代碼生成步驟使用NLITERAL()函數將字符串用空格轉換爲有效SAS變量名名稱文字以避免語法錯誤。

call execute(catx('=', nliteral(eng_name),nliteral(eng_name_bl))); 
+0

謝謝,湯姆。它he,了,但現在我對新名稱中的32個字符有限制。我以後需要將它導出爲「用戶友好」名稱,如果我使用標籤,它會起作用嗎?標籤字符數有限制嗎? – user3013203

+0

標籤最多可以包含256個字符。我相信PROC EXPORT將允許您使用標籤作爲生成的Excel文件中的列標題。 – Tom

+0

您可以使用QUOTE()函數來確保您生成的標籤語句具有正確引用的標籤。如果任何標籤值包含'「字符,這一點尤其重要。 – Tom