Как использовать циклы в шаге данных макросов sas - PullRequest
0 голосов
/ 01 февраля 2019

Мне нужно использовать циклы в макросе sas, который записывает шаг данных

У меня есть код, который должен работать, но это не так.Как я могу это исправить?

%macro ci;
data 
%do i=1 %to 3;
  _z%sysfunc(putn(%eval(&i),z2.)) ;
%end;
;
set _06;
%do i=1 %to 3;
  if num="%sysfunc(putn(%eval(&i),z2.))" then output _z%sysfunc(putn(%eval(&i),z2.));
%end;
run;
%mend;

%ci;

Я хотел бы получить следующий вывод:

data 
_z01
_z02
_z03;
set _06 ;
if num="01" then output _z01;
if num="02" then output _z02;
if num="03" then output _z03;
run;

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Вы очень близки.У вас просто был дополнительный ; в первом цикле.

Вам нужно изменить:

data 
%do i=1 %to 3;
  _z%sysfunc(putn(%eval(&i),z2.)) ;
%end;
;

на:

data 
%do i=1 %to 3;
  _z%sysfunc(putn(%eval(&i),z2.)) 
%end;
;

Добавление option mprint; кначало вашего кода покажет вам код, который был сгенерирован из вашего макроса и помог вам отладить его.

0 голосов
/ 01 февраля 2019

как насчет Если бы вы использовали более простой подход вместо преобразования числа в символ

data _06;
num='01';
output;
num='02';
output;
num='03';
output;
run;

%macro ci;
data 
%do i=1 %to 3;
    _z0&i
%end;
;
set _06;
%do i=1 %to 3;
  if num="0&i" then output _z0&i;
%end;
run;
%mend;

%ci; 
...