SAS宏更改列名称

时间:2018-09-06 06:32:08

标签: sas sas-macro

如何使用宏更改表列的名称(除非您指出)。数字类型列添加前缀“ XC_”,字符类型列添加前缀“ XN _”

1 个答案:

答案 0 :(得分:3)

适当的实用程序宏将接受所有处理抽象作为参数:

  • data=,用于操作的数据集
  • copy=,要保留的变量(复制是对TRANSPOSE中复制语句的致敬)
  • char_prefix=XC_,前缀,适用于未复制的字符变量的名称,默认为XC _
  • num_prefix=XN_,前缀,适用于未复制的数字变量的名称,默认为XN _

实用程序宏的内部是一个黑匣子。有时会指定内部设计以允许执行DATA和PROC步骤。

示例代码

Proc SQL用于用一系列旧=新名称对填充宏变量,这些名称对可以在RENAME执行的Proc DATASETS语句中使用

%macro Fixer ( data=, copy=, char_prefix=XC_, num_prefix=XN_ );

  %let syslast = &data;

  %local lib mem rename_clause;

  %let lib = %scan(&syslast,1);
  %let mem = %scan(&syslast,2);

  proc sql noprint;
    select 
      trim(name) || '=' || 
      case type
        when 'num'  then "&num_prefix" || name
        when 'char' then "&char_prefix" || name
        else ''
      end
      into :rename_clause separated by ' '
    from 
      dictionary.columns
    where 
          libname = "&lib"
      and memname = "&mem"
      and indexw (%upcase("&copy"), upcase(name)) = 0
  ;

  proc datasets nolist;
    modify &data;
    rename &rename_clause;
  run;
  quit;
%mend;


data class;
  set sashelp.class;
  teacher = 'Davidowski';
run;

options mprint;

%Fixer ( data=class, copy=Name )

其他时候,内部人员不得生成任何代码。对于这个问题,这样的宏将使用宏函数%SYSFUNC访问数据集函数,例如opencloseattrnvartype,{{1} },它会测试重命名条件并累积将发送给被调用方使用的old = new名称对。