使用PROC IMPORT导入Excel时如何去除变量名首尾空格与下划线?
解决方案
方法一:导入后批量清理变量名
先正常执行PROC IMPORT完成导入,再用PROC DATASETS批量处理变量名——把首尾的下划线去掉,保留中间空格转来的下划线:
/* 你的原始PROC IMPORT代码 */ PROC IMPORT OUT= work.raw_data DATAFILE= "C:\你的文件路径.xlsx" DBMS=EXCELCS REPLACE; SHEET="Sheet1"; GETNAMES=YES; validvarname=v7; RUN; /* 批量清理变量名 */ PROC DATASETS LIB=WORK NOLIST; MODIFY raw_data; RENAME %LET i=1; %DO %UNTIL (%SCAN(&_ALL_,&i)=); %LET old_var=%SCAN(&_ALL_,&i); /* 先把下划线转空格,去首尾空格,再把中间空格转回下划线 */ %LET new_var=%SYSFUNC(TRANSLATE(%SYSFUNC(STRIP(%SYSFUNC(TRANSLATE(&old_var,' ','_')))),'_',' ')); &old_var = &new_var %LET i=%EVAL(&i+1); %END; ; RUN; QUIT;
方法二:提前获取并清理变量名,手动指定导入
先通过LIBNAME连接Excel拿到原始变量名,清理后再导入时手动指定变量名,跳过PROC IMPORT自动生成的带首尾下划线的名字:
/* 连接Excel库 */ LIBNAME xls_lib EXCELCS "C:\你的文件路径.xlsx" GETNAMES=YES; /* 从字典表提取变量名并清理 */ PROC SQL NOPRINT; SELECT name AS old_name, TRANSLATE(STRIP(TRANSLATE(name,' ','_')), '_', ' ') AS new_name INTO :old_vars SEPARATED BY ' ', :new_vars SEPARATED BY ' ' FROM DICTIONARY.COLUMNS WHERE libname='XLS_LIB' AND memname='SHEET1'; /* SHEET1替换成你的工作表名,注意大写 */ QUIT; LIBNAME xls_lib CLEAR; /* 导入时手动指定变量名 */ PROC IMPORT OUT= work.clean_data DATAFILE= "C:\你的文件路径.xlsx" DBMS=EXCELCS REPLACE; SHEET="Sheet1"; GETNAMES=NO; /* 不读取Excel的表头,改用手动重命名 */ RENAME %LET i=1; %DO %UNTIL (%SCAN(&old_vars,&i)=); VAR&i = %SCAN(&new_vars,&i) %LET i=%EVAL(&i+1); %END; ; RUN;
方法三:直接修改Excel源文件(最简便)
如果有权限编辑Excel,直接选中表头单元格,用TRIM函数或者手动删除变量名的前后空格,之后再用PROC IMPORT导入,就能直接得到A_and_B格式的变量名。
内容的提问来源于stack exchange,提问作者Carabas
相关产品推荐
相关产品推荐

