使用模式匹配重命名SAS列

时间:2019-11-25 17:17:45

标签: regex sas

在这里使用SAS,并且有很多列名希望从中删除模式。在R中,这非常简单:

colnames(data) <- gsub('drop_pattern', '', colnames(data))

但是有一种相当优雅的SAS方法吗?

1 个答案:

答案 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(' ')))