2016-05-02 2 views
0

Привет Я пытаюсь вызвать макрос для каждой строки данных, используя код нижедлина SAS стоимости макропеременной превышает максимальную длину

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


&macrocalllist; 

Я получаю «переменную максимальную длину ':

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

из-за количества строк в наборе данных. Не могли бы вы предложить обход?

Благодарим вас,

+0

Сколько строк в наборе данных? – superfluous

ответ

0

CALL EXECUTE - это один из вариантов. Он позволяет генерировать серию макросообщений с использованием данных из набора данных без сохранения макроопределений в макропеременной.

Например:

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

И журнал покажет:

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

, который сработал! Спасибо. – suven

Смежные вопросы