2016-05-02 14 views
0

Hallo Ich versuche, in den Daten für jede Zeile ein Makro Rufaufbau den Code untenSAS Länge des Wertes der Makrovariablen überschreitet die maximale Länge

proc sql; 
select cats('%run_procreg(name=',name,',month=',month,')') into :macrocalllist 
    separated by ' ' from dataset_a; 
quit; 


&macrocalllist; 

ich mit dem ‚Variable maximale Länge bin immer 'Fehler:

SAS length of the value of the macro variable MACROCALLLIST (65540) exceeds the maximum length (65534). The value has been
truncated to 65534 characters.

wegen der Anzahl der Zeilen im Datensatz. Können Sie eine Umgehungslösung vorschlagen?

Vielen Dank,

+0

Wie viele Zeilen im Dataset? – superfluous

Antwort

0

CALL EXECUTE ist eine Option. Sie können eine Reihe von Makroaufrufen mit Daten aus einem Dataset generieren, ohne die Makroaufrufe in einer Makrovariablen zu speichern.

Zum Beispiel:

%macro testprint(data=,obs=); 
    proc print data=&data (obs=&obs); 
    run; 
%mend testprint; 

data _null_; 
    input datasetname $13. obs; 
    call execute('%nrstr(%testprint(data='||datasetname 
           ||',obs='||put(obs,1.) 
           ||'))' 
       ); 
    cards; 
sashelp.shoes 3 
sashelp.class 5 
; 

und das Protokoll zeigt:

NOTE: CALL EXECUTE generated line. 
131 ; 
1 + %testprint(data=sashelp.shoes,obs=3)  
NOTE: There were 3 observations read from the data set SASHELP.SHOES. 
2 + %testprint(data=sashelp.class,obs=5)  
NOTE: There were 5 observations read from the data set SASHELP.CLASS. 
+0

das hat funktioniert! Danke. – suven

Verwandte Themen