2016-08-15 11 views
0

Aktualisiert ** Ich bin relativ neu in SAS und habe ein Problem beim Durchlaufen einer Datumsvariablen. Auf der grundlegendsten Ebene muss ich iterativ mehrere Datensätze (oder eine iterative Verkettung) erstellen. Ich kann ein statisches Dataset erstellen, habe aber ein Problem mit dem Schleifen. Hier ist der Block des Codes, der funktioniertSAS Loop mit mehreren Daten

`
% lassen 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; 

Lauf; `

möchte ich durch eine Liste von Terminen, die die Schleife einen Datensatz für jeden Zeitpunkt erzeugen würde, oder jedes Datum Stapel auf dem vorherigen.

ich so etwas wie dies im Sinn hatte, aber das i-te Eintrag in dem Datum Vektor nicht richtig zugreifen kann ich Schleife versuche durch:

%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; 

Ich hoffe, das ist klarer! Nochmals vielen Dank für Ihre Hilfe !!

+0

In welchem ​​Format ist Ihre Liste? – david25272

+1

Ich habe es schwer, dieses Problem zu sehen. Können Sie einige Beispieldaten und die erwartete Ausgabe hinzufügen? – Reeza

Antwort

0

Wenn Ihre Liste von Daten in einer Tabelle enthalten ist, dann verbinden Sie diese Tabelle mit den Analysedaten und erstellen Sie das Ergebnis in einer einzigen Abfrage. Keine Notwendigkeit für Makro-Logik.

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

danke! Es stellt sich heraus, dass ich dies in einem sas datastep schreiben muss und proc sql nicht verwenden kann. – robq429

+1

Können Sie die Frage aktualisieren, um zu verdeutlichen, welche Eingabe Sie haben und welche Ausgabe Sie benötigen. Außerdem geht es um das Problem, dass Sie statt eines proc-Schritts einen Datenschritt verwenden müssen. – Tom

+0

In Bezug auf den Datenschritt, eine Anforderung von meinem Manager. Danke noch einmal! – robq429