大家有没有碰到过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金钱,重复访问不计)