admin 发表于 2020-2-21 21:05:51

变量名包含小数点符号(句点.号)的sas数据集怎样导出到文本或者excel(sas数据集变量名批量修改)


    大家有没有碰到过sas数据集因为变量名中包含了小数点符号,而无法导出的情况呢?    这里提供一段sas代码,完美解决了这个问题,其实就是通过对sas数据集变量名进行批量修改实现。

    代码很简短,不多做解释:

%macro renfileds(ds=,prefix=);
/*
宏:%renfileds(ds=,prefix=);
功能:SAS 数据集变量名改名,如包含小数点,则去掉第一个小数点.及其之前的内容,将其他的小数点.替换为下划线_,以便支持文本导出。
         同时可以给变量名增加统一前缀&prefix。
参数:
      ds: 数据集名称
      prefix: 新变量名前缀
步骤:
      获得数据集ds的所有变量。
      逐一变量改名。
入口:调用点在代码最后。
联系:建议意见可在此贴回复或联系微信 daijp1971
*/
%if %length(%sysfunc(compress("&ds.","."))) ne %length(%sysfunc(compress("&ds.","")))
%then
      %do;
                %let libname=%scan("&ds.",1,".");
                %let memname=%scan("&ds.",2,".");
      %end;
%else
      %do;
                %let libname=WORK;
                %let memname=&ds.;
      %end;

proc sql noprint;
select name into :fieldnames separated by ' '
from dictionary.columns where libname=upcase("&libname") and memname=upcase("&memname") order by varnum;
quit;

data &ds;
set &ds;
%let re=%sysfunc(prxparse(s/^.*\.//));
%local i;
%let i=1;
%do %until (%scan(&fieldnames.,&i.," ")=);
%let oldname=%sysfunc(compress(%scan("&fieldnames",&i," ")));
      %let newname=%sysfunc(prxchange(&re,-1,&oldname));
      %let newname=%sysfunc(tranwrd(&newname,.,_));

      %let cmd=%unquote(rename %str(%')&oldname.%str(%')n=%str(%')&prefix.&newname.%str(%')n%str(;));
      &cmd
      
%let i=%eval(&i.+1);
%end;
run;
%mend;

/* ---------------------------------功能调用点------------------------------- */
%renfileds( ds=test, prefix=pre_ );
完毕!







页: [1]
查看完整版本: 变量名包含小数点符号(句点.号)的sas数据集怎样导出到文本或者excel(sas数据集变量名批量修改)