2016-08-15 117 views
0

更新**我對SAS相對較新,並且在循環日期變量時遇到問題。在最基本的層面上,我需要迭代地創建多個數據集(或迭代連接)。我能夠創建一個靜態數據集,但是在循環方面存在問題。這裏是工作的代碼塊具有多個日期的SAS循環

`
%let myvar = '11Jul16'd;

 data shape_test; 

    set Analysis_set; 

    Where(dt_expctd_setmt >&myvar and dt_trd <= &myvar); 


    by dt_trd; 



IF B='.' Then B=0; 

IF I='.' Then I=0; 

IF S='.' Then S=0; 

B=sum(B); I=Sum(I); S=Sum(S); 

S_B= S-B; 

S_B_I=S-B+I; 

format B I S S_B S_B_I dollar12.0; 

drop dt_expctd_setmt; 

運行;`

我想通過這將產生一個數據集的每個日期,或堆在前面的每個日期日期列表循環。

我想到這樣的事情,但不能正常訪問,通過在最新矢量的第i個條目我試圖循環:

%let date_var= the date column; 
Do i = 1 to length(%date_var); 

%macro PleaseWork(date_var); 

Data Project_name&date_var(i); 

set Analysis_set; 

Where(dt_expctd_setmt >&date_var(i) and dt_trd <= &date_var(i)); 

Code with all the math stuff (like above) 

Run; 

%mend 
End; 

我希望這是更清晰!再次感謝你的幫助!!

+0

你的列表是什麼格式? – david25272

+1

我很難看到這個問題。你能否包含一些樣本數據和預期的輸出? – Reeza

回答

0

如果您的日期列表在表格中,則將該表格與分析數據結合起來,並在單個查詢中生成結果。不需要宏邏輯。

proc sql; 
    create table total_break_out as 
    select b.myvar As Date 
      , a.category_name AS Category 
      , sum(a.B) as B 
      , sum(a.I) as I 
      , sum(a.S) as S 
    from analysis_set a 
     , dateset b 
    where a.var1 > b.myvar 
     and a.var2 <= b.myvar 
    group by 1,2 
    ; 
quit; 
+0

謝謝!事實證明,我必須在sas datastep中編寫它,並且不能使用proc sql。 – robq429

+1

您是否可以更新問題,使其更清晰地瞭解您有什麼輸入以及您需要什麼輸出。還有什麼關於這個問題需要你使用數據步驟而不是proc步驟。 – Tom

+0

就數據步驟而言,我的經理要求。再次感謝! – robq429