在这里使用SAS,并且有很多列名希望从中删除模式。在R中,这非常简单:
colnames(data) <- gsub('drop_pattern', '', colnames(data))
但是有一种相当优雅的SAS方法吗?
答案 0 :(得分:4)
您可以在PROC DATASETS中使用RENAME语句来修改数据集中的变量名称,而不必创建新的数据集。
proc datasets lib=mylib nolist;
modify mydata ;
rename freddrop_patterndy = freddy samdrop_patternmy=sammy ;
run;
quit;
您可以使用许多函数(包括支持正则表达式的函数)从旧名称构造新名称。例如,如果您只想删除一些常量文本,则可以执行以下操作:
new_name = transtrn(old_name,'drop_pattern',trimn(' '));
您可以对变量名称的元数据使用查询,以将oldname = newname对生成为宏变量。
proc sql noprint ;
select catx('=',name,transtrn(old_name,'drop_pattern',trimn(' '))
into :rename_list separated by ' '
from dictionary.column
where libname='MYLIB' and memname='MYDATA' and index(name,'drop_pattern')
;
quit;
然后,您可以在代码中使用宏变量。如果没有需要更改的名称,则可能需要跳过此步骤。
%if &sqlobs %then %do ;
proc datasets lib=mylib nolist;
modify mydata ;
rename &rename_list ;
run;
quit;
%end;
请注意,如果将VALIDVARNAME选项设置为ANY,则在生成oldname = newname对时,将需要使用NLITERAL()函数来处理可能不遵循正常命名规则的名称。
select catx('=',nliteral(name),nliteral(transtrn(old_name,'drop_pattern',trimn(' ')))