access大量数据的汇总技巧

来源:互联网 时间:2016-01-03

实际工作中遇到的问题,现在有若干个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,如何合并就太简单了吧。

 

相关阅读:
Top