2012-06-09 71 views
1

我有24個以相同方式構建的數據集。我的意思是相同的列標題(時間,日期,價格,股票代碼),數據集結構等。我不希望追加所有24個文件,因爲一個數據集要處理的很大。我將所有數據集命名爲「file1 file2 file3 file4 ....到file24」。SAS:從多個數據集創建多個文件

我想要做的是以下幾點:

  1. 例如更改日期格式在我所有的24個文件一次;

  2. 能夠從每個文件#中提取特定股票代碼,如「戴爾」,並附加所有提取的「戴爾」數據;

  3. 最後,我該如何創建一個允許我將股票代碼從'Dell'更改爲我的列表中的另一個股票代碼'Goog'的循環?我想循環做(2)我所有的股票代碼。

回答

2

這是解決方案的原型。我不知道你是否需要做很多符號更改。將根據請求修改代碼。沒有測試,它應該工作。

%macro test(); 
%do i=1 %to 24; 
    data file&i; 
    set file&i; 
    format date [dateformat]; /*replace with the format you want */ 

proc append base=unions data=file&i(where=(stock_symbol='Dell')); 

data unions; 
set unions; 
    stock_symbol='Goog'; 

%end; 
%mend; 

%test(); run; 
3
  1. 要更改數據集中的日期格式,它可能是通過所有的觀察一個壞主意循環。標準語法是 -

    proc datasets library = your_libname nolist; modify dataset_name; format variable_name format_name; quit;

鑑於修改語句不採取多個SAS文件,你將不得不把它包在一個宏對所有24個文件

%macro modformats(); 
proc datasets library = <your libname> nolist; 
    %do i = 1 %to 24; 
    modify file&i; 
    format <variable name> <format name>; 
    %end; 
quit; 
%mend modformats; 
  1. 提取和追加的所有「戴爾」相關數據,最好使用視圖。

例如,首先要定義視圖(注意,不存在所謂的 'all_files' 在這裏創建的物理數據集) -

data all_files/view = all_files; 
    set file1 file2... file24; 
run; 

,然後你可以寫 -

data dell; 
    set all_files; 
    where ticker = 'DELL'; 
run; 
+0

感謝很多!你認爲我這個:data all_files/view = all_files;高超!!!! – Plug4