2016-06-03 10 views
0

Ich habe ein Makro, das Daten in einer Tabelle über einen bestimmten Zeitrahmen eingefügt.sas Ausführen eines Makros für jede Instanz in einem Datenschritt

Es durchläuft eine Reihe von Daten von-bis (die in einem Dataset gespeichert sind) und führt das Makro mit einer Anweisung proc sql insert aus.

Beim Überprüfen der Daten am Ende von allem, merke ich, dass nur Daten aus dem letzten Von-Bis-Zeitraum in dem neuen Datensatz enthalten sind.

Hier ist mein Code beim Aufruf des Makros im Datenschritt.

data _null_; 
    set extract_insert_dates; 
    %insert_table_extract(put(extract_start, date11.),put(extract_end, date11.)); 
run; 

Gibt es etwas anderes, ich soll arbeiten, um für dieses in den Daten Schritt anrufen und Einfügen von Daten (das Makro), das jeweils von dem von-bis Perioden, im Gegensatz zu nur die letzten?

Antwort

3

Geben Sie vor, Sie sind der Makrocompiler und ersetzen den Makroaufruf durch den tatsächlichen SAS-Code, der generiert wird. Denken Sie daran, dass die Parameterwerte put(extract_start, date11.) und put(extract_end, date11.) für den Makroprozess nur Zeichenfolgen sind.

Ich vermute, dass Sie Call Execute verwenden müssen, damit die Werte der Datensatzvariablen extract_start und extract_end an das Makro übergeben werden können.

data _null_; 
    set extract_insert_dates; 
    call execute(cats('%nrstr(%insert_table_extract)(',put(extract_start, date11.),',',put(extract_end,date11.),')')); 
run;