Я использую SAS 9.2, и я получил следующий фрагмент кода:SAS макросъемки разрешения вызова symputx (получить текущую строку)
data success error;
length vague 3 path $150;
set foplist;
call symputx('error_count', rownum);
%if &&error&error_count = 0 %then %do;
path= "&&path&error_count";
vague=1;
output success;
%end;
%else %do;
...
%end;
run;
Для каждой записи я хотел бы получить ROWNUM и объединить это с другой макропеременной. В rownum отображается номер журнала записи в наборе данных списка foplist. По какой-то причине я всегда получаю последний номер в наборе данных
Для примера (вероятно, из-за компиляции макроса?): --- RowNum = 1 B --- ROWNUM = 2
я только получаю rownum = 2
Любая идея, как это исправить?
Спасибо!
Технически вы можете создать решить макропеременную в одном шаге данных: вызова symput ('VAR', '1'); если symget ('VAR') = '1', тогда поставьте 'true'; Но я уверен, что Крис не имел в виду именно это. Он имел в виду, что вы не можете вызвать symput, а затем развернуться и использовать & VAR в том же наборе данных. Совершенно верно! Когда вы смешиваете макрокоманд% foo и & bar с шагом данных, представьте себе весь выполняемый макрокод, потому что это, по сути, то, что делает SAS. Только после того, как решены% foo и & bar, SAS выполнит ваш шаг данных. –
И все равно% if ...% then ... не могут использоваться в открытом коде как сами (только внутри% macro ...% mend wrap). –