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