2016-08-15 119 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