2013-09-20 3 views
1

Я хотел бы удалить последние 3 буквы из набора переменных в наборе данных SAS. (должен concatenante 2 наборов данных.)Удалить последние 3 буквы set sas variables

И в первом сете, переменные названы, например: а, четкость, ГХИ ...

В то время как во 2-м набора они названы: abc_1A, def_1A, ghi_1A ...

Как я могу удалить '_1A' от 100+ переменных? Я не хочу, чтобы просто добавить «_1A» на мой первый Dataset

Благодарности

ответ

2

Есть несколько вариантов. Вот один «безопасный» вариант и один «небезопасный» вариант.

Безопасный вариант:

Написать макрос, чтобы переименовать переменную с его именем без _1A .; Аргументы: var = имя переменной, len = длина желаемого конечного имени переменной;

%macro rename_shorter(var=,len=); 
&var. = %substr(&var.,1,&len.) 
%mend rename_shorter; 

Создать список звонков из словаря.

proc sql; 
select cats('%rename_shorter(var=',name,',len=',length(name)-3,')') 
into :renamelist separated by ' ' 
from dictionary.columns 
where libname='SASHELP' and upcase(memname)='CLASS'; 
quit; 

Позвоните, что список;

data want; 
set sashelp.class(rename=(&renamelist.)); 
run; 

небезопасным вариант, в том смысле, что он не проверяет, что все выровнены правильно, является

proc sql; 
create table want as 
select * from have_namedright H 
outer union corr 
select * from have_namedwrong W 
; 
quit; 
+0

Обратите внимание, что этот код не работает, как-то, потому что некоторые из имена столбцов - всего три символа. –

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