2016-05-19 19 views
1

In meinem Programm möchte ich alle Variablen von Spalte zu Makro in SAS übergeben. Ich habe Code wie folgt aus:Übergeben PDV-Variablen zu Makro in SAS

data _null_; 
set T.BetterSet; 
%test(myCollumn); 
run; 

Das ist einfach Makro:

%macro test(variable); 

data &variable; 
set End.DatasetpreparedForAnalisys; 
where &variable <= 0; 
keep vin3 &variable; 
run; 

%mend; 

Unfortunatelly bekam ich Fehler: Fehler: Variable "Variable" ist nicht auf Datei End.DatasetpreparedForAnalisys.

Wie wird dieses Problem gelöst? Warum passieren Variablen nicht wie erwartet?

+0

Warum versuchen Sie, einen Datenschritt in einem anderen auszuführen? Kannst du auch klarstellen, was du meinst, indem du "alle Variablen von einer Spalte an ein Makro übergibst"? Ich sehe nicht, wie das, was du bisher versucht hast, das erreicht. – superfluous

+0

Versuchen Sie, variable Werte oder Variablennamen zu übergeben? – Reeza

+0

Es ist nicht so gemacht. Verwenden Sie die Anrufausführung. http://support.sas.com/documentation/cdl/en/mcrolref/67912/HTML/default/viewer.htm#n1q1527d51eivsn1ob5hnz0yd1hx.htm – Reeza

Antwort

1

Ihr Code wird auf diese Weise nicht funktionieren, da Sie Datenschrittanweisungen in einem anderen Datenschritt ausgeben. Um diese Art von Dingen zu tun, müssen Sie Dinge anders einrichten. Hier ist, wie es geht.

Lassen Sie uns zunächst ein Dataset namens Spalten erzeugen (als T.BetterSet Tabelle aufwirft), in dem wir Werte einfügen column1, column2 und column5 - das heißt, die Spalten möchten wir in Tabellen gleichen repliziert sehen Name später.

data columns; 
    informat column $32.; 
    input column; 
    datalines; 
column1 
column2 
column5 
; 

Dann werden wir Beispieldaten (die sich als Ihre End.DatasetpreparedForAnalisys Tabelle), die Spalten column1-column5 erzeugen. Angesichts des Inhalts der Tabelle columns werden nur die Spalten 1, 2 und 5 später eigenständige Tabellen.

data sampleData; 
    informat column1-column5 8.; 
    input column1-column5; 
    datalines; 
12 -1 2 3 0 
-2 -3 -1 0 -3 
0 -4 -5 -2 -9 
-1 -5 4 2 0 
; 

Jetzt erklären wir ein Makro %createTable, die erforderlich alle Anweisungen erteilt werden die Ausgabe-Datensätze für die einzelnen Spalten zu erstellen.

%macro createTable(col); 
    data &col; 
    set sampleData; 
    where &col <= 0; 
    keep &col; 
    run; 
%mend; 

ist All jetzt mit der call execute Routine einrichten. Mithilfe von call execute können Sie Anweisungen ausstellen, die wir als "parallelen" Prozess bezeichnen könnten. Das bedeutet, dass die Anweisungen nicht im aktuellen Datenschritt enthalten sind, sondern als eigenständiger Teil der Anweisungen gesendet werden, die von SAS kompiliert und ausgeführt werden. Beachten Sie, dass der Makroaufruf '% createTable' in einfache Anführungszeichen gesetzt wird. Dies ist der Schlüssel, sonst würden Sie Probleme bekommen.

data _null_; 
    set columns; 
    call execute(cats('%createTable(', column, ')')); 
run; 

Das Protokoll zeigt jetzt:

NOTE: There were 3 observations read from the data set WORK.COLUMNS. 
NOTE: DATA statement used (Total process time): 
     real time   0.00 seconds 
     cpu time   0.00 seconds 

NOTE: CALL EXECUTE generated line. 
1 + data column1;  set sampleData;  where column1 <= 0;  keep column1; run; 

NOTE: There were 3 observations read from the data set WORK.SAMPLEDATA. 
     WHERE column1<=0; 
NOTE: The data set WORK.COLUMN1 has 3 observations and 1 variables. 
(...)  

2 + data column2;  set sampleData;  where column2 <= 0;  keep column2; run; 

NOTE: There were 4 observations read from the data set WORK.SAMPLEDATA. 
     WHERE column2<=0; 
NOTE: The data set WORK.COLUMN2 has 4 observations and 1 variables. 
(...) 

3 + data column5;  set sampleData;  where column5 <= 0;  keep column5; run; 

NOTE: There were 4 observations read from the data set WORK.SAMPLEDATA. 
     WHERE column5<=0; 
NOTE: The data set WORK.COLUMN5 has 4 observations and 1 variables. 
(...) 

So bestätigt, dass

  • 3 Beobachtungen von column1 in der neuen Tabelle column1
  • 4 Beobachtungen wurden gehalten Form column2 genannt gehalten wurden Die neue Tabelle namens column2
  • 4 Beobachtungen wurden von Spalte5 gehalten in der neuen Tabelle namens column5
Verwandte Themen