SAS名称与空白重命名表

问题描述:

我有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.*.com/help/mcve)。 – user667489

首先不这样做。带有空格的变量名称在颈部疼痛。为什么不使用空格的值作为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