data test; input a b; datalines; 1 3 2 4 3 5 1 3 2 4 3 5 ; run; %macro recode(myvar, num1, num2); array &myvar._a(*) &myvar.&num1 - &myvar.&num2; do i = &num1 to &num2; &myvar._a(i - &num1 + 1 ) = .; end; do i = &num1 to &num2; if (&myvar = i) then &myvar._a(i - &num1 + 1 ) = 1; if (&myvar > .) and (&myvar ~= i) then &myvar._a(i - &num1 + 1) = 0; end; %mend; options mprint mlogic; data test2; set test; %recode(a, 1, 3); %recode(b, 3, 5); drop i; run; proc print data = test2; run;
Obs a b a1 a2 a3 b3 b4 b5
1 1 3 1 0 0 1 0 0 2 2 4 0 1 0 0 1 0 3 3 5 0 0 1 0 0 1 4 1 3 1 0 0 1 0 0 5 2 4 0 1 0 0 1 0 6 3 5 0 0 1 0 0 1