2014-02-18 65 views
0

我有51个文件(我从所有50个州加上失业率加上BLS的DC),我需要将它们堆叠在一起。我正在研究一个将导入这些文件并将它们堆叠起来的宏,但是我坚持如何编写一个循环来堆叠它们。我只是堆叠第一个和最后一个数据集,而没有介于两者之间。我不知道我做错了什么,任何帮助将不胜感激。提前致谢。堆栈数据循环 - SAS宏

/*MACRO TO IMPORT TRANSLATED RAW DATA FILES*/ 
%macro import; 


%do iterate = 1 %to &files; 


    data _null_; 
    set files(where = (file = &iterate)); 
     call symput('infile',left(trim(filename))); 
    call symput('State',left(trim(state))); 
    run; 


    %put &infile; 
    %put &state; 
    /*IMPORT RAW DATAFILES*/ 
    proc import datafile = "&raw\&infile" out = &State dbms = xls replace; 
    getnames = yes; namerow = 11; datarow = 12; 
    run; 
    /*CREATE A NEW STATE COLUMN*/ 
    data &State; 
    set &State; 
    State = "&State"; 
    run; 

    %if &iterate = 1 %then %do; 
    data merge1; 
    keep year period labor_force employment unemployment unemployment_rate state; 
    format year 4. period $3. labor_force employment unemployment comma12.2 unemployment_rate 4.2 
    state $24.; 
    set &state; 
    run; 
    %end; 

    %if &iterate > 1 %then %do; 
    data unemploy_merge; 
    keep year period labor_force employment unemployment unemployment_rate state; 
    set merge1 &state; 
    run; 
    %end; 


%end; 


%mend import; 

回答

0

你需要你的第二个(&迭代> 1)语句更改为:

data merge1; 
keep year period labor_force employment unemployment unemployment_rate state; 
set merge1 &state; 
run; 

否则,你总是创建与ITERATE = 1的数据名为 'unemploy_merge' 一个新的数据集和当前文件。这就是为什么你只看到最后的第一个和最后一个。