2016-12-06 9 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 name literal, чтобы избежать синтаксических ошибок.

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

Спасибо, Том. Это произошло, но теперь у меня есть ограничение на 32 символа в новых именах. Мне нужно экспортировать его, чтобы превосходить «удобные» имена позже, будет ли он работать, если я буду использовать метки? существуют ли ограничения для номера символьного знака? – user3013203

+0

Этикетки могут содержать до 256 символов. Я считаю, что PROC EXPORT позволит вам использовать метку в качестве заголовков столбцов в сгенерированном файле Excel. – Tom

+0

Вы можете использовать функцию QUOTE(), чтобы гарантировать, что сгенерированная инструкция ярлыка правильно снабжена метками. Это особенно важно, если какое-либо из значений метки содержит символы '' '. – Tom

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

  • Нет связанных вопросов^_^