实际工作中遇到的问题,现在有若干个ACCESS数据库(excel,epidata等同样原理),分别有若干个人录入,数据结构相同,如何将它们方便、快速的合并到一起呢?ACCESS的批量合并,网上有很多方法,如用vba实现,但比较麻烦,我用sas实现了合并,具体方法如下: (1)把要合并的文件放到一个文件夹下(最好不要有子文件夹),写一个获取文件名的批处理,要不一个个改名,多麻烦。批处理如下(把下面代码放在txt记事本里保存,然后更改后缀名为bat,然后运行,按提示输入要合并的文件夹的路径,运行就可以得到这个文件夹下所有文件的文件名): @echo off if exist list.txt del list.txt /q :input cls set input=: set /p input= 输入要合并的文件所在的路径,回车确定后得到全部文件名: set "input=%input:"=%" :: 上面这句为判断%input%中是否存在引号,有则剔除。 if "%input%"==":" goto input if not exist "%input%" goto input for %%i in ("%input%") do if /i "%%~di"==%%i goto input pushd %cd% cd /d "%input%">nul 2>nul || exit set cur_dir=%cd% popd for /f "delims=" %%i in ('dir /b /a-d /s "%input%"') do echo %%~nxi>>list.txt if not exist list.txt goto no_file start list.txt exit :no_file cls echo %cur_dir% 文件夹下没有单独的文件 pause (2)构建一个excel文件,第一行为变量名,之后为具体值。第一列变量为文件名name(直接从刚才的批处理拷贝过来就行了),第二列为sas数据集名sas_name(对应于sas中的数据集名,可以用a1、a2等,用excel直接拖就行了);做好后把这个excel文件保存。 (3)启动sas系统,写下如下代码: libname tests excel 'D:\表名文件.xls';
%include 'D:\yaowei\Macro.sas'; %macro test(name=,sas_name=); PROC IMPORT OUT= WORK.&sas_name DATATABLE= "test" DBMS=ACCESS REPLACE; DATABASE="D: \&name"; SCANMEMO=YES; USEDATE=NO; SCANTIME=YES; RUN; %mend; %TableDrivenMacro(table=TESTS.'Sheet1$'n, macro=test, Parms=name table ); run; (4) 运行以上代码,可以将数据全部读如到sas,如何合并就太简单了吧。 |