2014-04-10 80 views
1

我必須對一些excel文件的帳戶進行約500個excel文件。SAS來計算excel觀察值

我不需要通過文件來匹配賬號數量。

Example file 1: \\directory\Loaded\Jan2014\excel1 

Example file 2: \\directory\Loaded\Feb2014\excel2 

Example file 3: \\directory\Loaded\Feb2014\excel3 

(賬號總是與行1填充在塔B到5作爲標題)

使用例如上述

需要的輸出:

主文件夾(文件)|子文件夾(Jan2014)|文件名(excel1)|賬號數

這可能使用SAS嗎?

所以,如果這是不夠的信息,我已經搜索了網絡,並找到使用批處理文件帶回的文件列表的方式,但沒有任何統計意見。

+0

我想和更簡單的方法可能是使用通配符與SAS導入,但爲此我可以得到要導入的文件名? – user3442162

+0

你有訪問許可的PC文件(即,你可以做從Excel導入)? – Joe

+0

另外,表單總是被命名爲相同的東西(比如SHEET1)還是不同?它是可預測的嗎? – Joe

回答

0

我會用這個Powershell,除非你真的需要在SAS中完成。 要將結果導入SAS,如果需要,可以將數據從powershell保存到excel文件並將其導入SAS。

看看例如作爲首發的Get the Number of Rows in Column of a worksheet

+0

我從未使用Powershell,查看上面的鏈接,我將不得不一次執行1個文件,這對於超過500個文件是不可能的 – user3442162

+0

熟練的PowerShell用戶可以編寫腳本,使其使用類似於我上面的回答是對所有文件運行一個循環。 (我不是這樣的用戶,對不起!) – Joe

1

SAS解決方案就像這樣。如果你完成了所有的libnames,然後設置所有的數據集,那麼你可以使它更高效一些,但是這個代碼更簡單一些,對於500我認爲這是合理的。不幸的是,excel libnames似乎並沒有爲你排好序,所以你不能僅僅使用dictionary.tables來做到這一點。

如果圖表名稱不同,您需要修改此選項以考慮這一點,可以通過設置一個宏變量來保存圖表名稱,如果它以某種方式鏈接到文件名,或者通過該宏會對dictionary.tables執行查詢以查看libname中存在的表。

%let basedir=c:\temp; *whatever the base directory is that all of your excel files are upstream from; 
filename dirl pipe "dir /b/s &basedir.\*.xlsx"; 

data libnames; 
infile dirl lrecl=1024 pad; 
input 
@1 filename $1024.; 
run; 

%macro get_rowcount(file=); 
    libname _temp excel "&file."; 
    data _rowcount; 
    set _temp."Sheet1$"n end=eof; 
    length file_name $1024; 
    retain file_name "&file."; 
    if eof then do; 
    rowcount=_n_; 
    output; 
    end; 
    keep rowcount file_name; 
    run; 

    proc append base=rowcounts data=_rowcount force; 
    run; 
%mend get_rowcount; 

proc sql; 
select cats('%get_rowcount(file=',filename,')') into :sheetlist separated by ' ' 
    from libnames; 
quit; 
&sheetlist.; 
+0

喬 - 你能列出這需要工作的任何模塊依賴關係嗎?謝謝 –

+0

這可以在Windows桌面環境中使用ACCESS許可的PC FILES。在Windows服務器環境中,如果您的管理員啓用了'XCMD',這可能仍然有效。在非Windows環境下,這個概念應該仍然可行,但要修改相應系統命令的目錄命令(所以,在Linux中,帶有相應標誌的'ls'),如果它是「允許的」一個服務器環境,並具有PC文件服務器(並修改libname以使用該方法)。 – Joe

+0

我已經把所有.xls文件放在一個文件夾中,並使用* .xls作爲通配符運行proc導入。雖然這適用於第一部分,但我還需要將其添加到使用proc導入創建的表中的文件名中。這可能嗎? – user3442162