[繁体中文]             |

赛壶网

头部广告

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

[复制链接]
分享奖励排行榜
发表于 2020-2-21 21:05:51 | 显示全部楼层 |阅读模式

    大家有没有碰到过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_ );
完毕!
sas.jpg






有人访问你的分享时,你将获得奖励(每次1金钱,重复访问不计)

评论

使用道具 举报

使用高级回帖 (可批量传图、插入视频等)快速回复

您需要登录后才可以回帖 登录 | 立即加入

本版积分规则   Ctrl + Enter 快速发布  

发帖时请遵守我国法律,网站会将有关你发帖内容、时间以及发帖IP地址等记录保留,只要接到合法请求,即会将信息提供给有关政府机构。
快速回复 返回顶部 返回列表