實際工作中遇到的問題,現在有若干個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,如何合并就太簡單了吧。
編輯:北京信誠IT保姆IT外包部 http:// www.aboverow.cn www.xcit.com.cn |