2017-01-06 1 views
1

Ich habe ein Makro, das ein Tortendiagramm für eine bereitgestellte ID zeichnet. Es wählt grundsätzlich eine Zeile aus einer Tabelle aus, transponiert dann die erhaltene einzeilige Tabelle und zeichnet dann ein Kreisdiagramm. Es funktioniert ganz gut, wenn ich es für eine Beobachtung rufe (zB% StudPieChart (931123)). Hier ist der Code:Ausführen eines Makros mit jeder Beobachtung in sas

%MACRO StudPieChart(id); 
data projekt.temp; 
set projekt.cwiczenia(keep=nrInd KOL1 KOL2 KOL3 aktywnosc where= (nrInd=&id)); 
drop nrInd; 
run; 

proc transpose data=projekt.temp out=projekt.temp; 
run; 

proc gchart data=projekt.temp; 
    pie _NAME_/sumvar=COL1 percent=inside; 
run; 
%MEND; 

Jetzt möchte ich ein Diagramm für nicht eine, aber einige Probe der Beobachtungen zeichnen. Also habe ich Zufallsauswahl generiert und versucht, ein Makro in einem Datenschritt auszuführen. Aber es funktioniert nicht mehr und ich habe keine Ahnung warum.

Hier ist der Rest des Codes:

proc surveyselect data=projekt.cwiczenia out=projekt.sample(keep=nrInd) sampsize=5 NOPRINT; 
run; 


data _NULL_; 
set projekt.sample; 
%StudPieChart(nrInd); 
run; 

Antwort

2

Sie können ANRUF AUSFÜHREN verwenden.

data _NULL_; 
    set projekt.sample; 
    call execute('%nrstr(%StudPieChart('||nrInd||'));'); 
    run; 

RTM: http://support.sas.com/documentation/cdl/en/lefunctionsref/69762/HTML/default/viewer.htm#p1blnvlvciwgs9n0zcilud6d6ei9.htm

+0

Dank! Das funktioniert ganz gut. Aber könnten Sie erklären, was wir eigentlich als Argument in der Ausführungsfunktion angeben? –

+0

@Kuba_ Das Argument zu CALL EXECUTE ist eine Zeichenfolge. In Ihrem Fall ist es% nrstr (% StudPieChart ()); Ich habe in meinem ursprünglichen Beitrag eine Klammer weggelassen, aber ich habe sie hinzugefügt. Ich hätte testen sollen, aber Sie haben keine Daten geliefert. Siehe den Link in meiner Antwort. Der SAS-Benutzerführer sollte früh und oft konsultiert werden. –

Verwandte Themen